$Date: 2023/10/27 11:36:11 $
NTTコミュニケーションズ株式会社が提供する OCNバーチャルコネクト を利用してインターネット接続をする機能を提供します。
※ OCNバーチャルコネクトは、NTTコミュニケーションズ株式会社の登録商標(または商標)です。
変更前 | 変更後 |
---|---|
dns server pp 1 dns server select 500001 pp 1 any . restrict pp 1 dns server dhcp lan2 |
dns server pp 1 dns server select 500000 dhcp lan2 aaaa . dns server select 500001 pp 1 any . restrict pp 1 dns server dhcp lan2 |
ヤマハRTシリーズでは、以下の機種およびファームウェアで、OCNバーチャルコネクト対応機能をサポートしています。
機種 | ファームウェア | |
---|---|---|
動的IP契約 固定IP1契約 | 固定IP8/16契約 | |
RTX3510 | すべてのリビジョン | すべてのリビジョン |
RTX1300 | ||
RTX1220 | ||
RTX830 | Rev.15.02.10 以降 | Rev.15.02.14 以降 |
NVR510 | Rev.15.01.15 以降 | Rev.15.01.16 以降 |
NVR700W | Rev.15.00.16 以降 | Rev.15.00.17 以降 |
RTX1210 | Rev.14.01.34 以降 | Rev.14.01.35 以降 |
RTX5000 | Rev.14.00.32 以降 | Rev.14.00.32 以降 |
RTX3500 | Rev.14.00.32 以降 | Rev.14.00.32 以降 |
OCNバーチャルコネクトのサービス利用下における VPN接続は、以下の機種およびファームウェアで動作可能です。
機種 | ファームウェア | ||||||
---|---|---|---|---|---|---|---|
動的IP契約 | 固定IP1契約 | 固定IP8/16契約 | |||||
IPsec (イニシエーター) |
IPsec | L2TP/IPsec | L2TPv3/IPsec L2TPv3 |
IPsec | L2TP/IPsec | L2TPv3/IPsec L2TPv3 | |
RTX3510 | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン |
RTX1300 | |||||||
RTX1220 | Rev.15.04.03 以降 | Rev.15.04.03 以降 | Rev.15.04.03 以降 | Rev.15.04.03 以降 | |||
RTX830 | Rev.15.02.10 以降 | Rev.15.02.10 以降 | Rev.15.02.20 以降 | Rev.15.02.20 以降 | Rev.15.02.14 以降 | Rev.15.02.20 以降 | Rev.15.02.20 以降 |
NVR510 | - | - | Rev.15.01.21 以降 | - | - | Rev.15.01.21 以降 | - |
NVR700W | Rev.15.00.16 以降 | Rev.15.00.16 以降 | Rev.15.00.22 以降 | Rev.15.00.22 以降 | Rev.15.00.17 以降 | Rev.15.00.22 以降 | Rev.15.00.22 以降 |
RTX1210 | Rev.14.01.34 以降 | Rev.14.01.34 以降 | Rev.14.01.40 以降 | Rev.14.01.40 以降 | Rev.14.01.35 以降 | Rev.14.01.40 以降 | Rev.14.01.40 以降 |
RTX5000 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 |
RTX3500 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 | Rev.14.00.32 以降 |
OCNバーチャルコネクトのサービス利用下におけるVPN接続は、以下のVPN接続の設定例を参考に、OCNバーチャルコネクトのサービスと組み合わせてご利用ください。
(※) MAP-E について
・IPIPトンネリング(IPv4 over IPv6トンネル接続)を利用して行います。この時、トンネルに設定したIPマスカレードでグローバルIPv4アドレスに変換され、ポート番号が割り当てられます。このグローバルIPv4アドレスやポート番号は、MAP-Eのマップルールに従って自動的に決定されます。これらを固定で設定する事はできません。
・マップルールは、ルーターの起動後やトンネル設定後に、自動的にサーバーから取得します。取得したルールに従って、即時に、IPv4アドレスやポート番号を決定します。
・マップルールを取得できていない時は、トンネルはダウンして通信はできません。
設定値 | 説明 |
---|---|
ipsec | IPsec トンネル |
ipip | IPv6 over IPv4 トンネル、IPv4 over IPv6 トンネル、IPv4 over IPv4 トンネルまたは IPv6 over IPv6 トンネル |
pptp | PPTP トンネル名 |
l2tp | L2TP/IPsec トンネル |
l2tpv3-raw | L2TPv3 トンネル |
l2tpv3 | L2TPv3/IPsec トンネル |
ipudp | IPUDP トンネル |
map-e | MAP-E トンネル |
設定値 | 説明 |
---|---|
IP アドレス | 1 個の IP アドレスまたは間に - をはさんだ IP アドレス ( 範囲指定 )、およびこれらを任意に並べたもの |
ipcp | PPP の IPCP の IP-Address オプションにより接続先から通知される IP アドレス |
primary | ip interface address コマンドで設定されている IP アドレス |
secondary | ip interface secondary address コマンドで設定されている IP アドレス |
map-e | MAP-E で自動的に生成された IP アドレス |
適用インタフェース | LAN | PP | トンネル |
---|---|---|---|
ipcp | × | ○ | × |
primary | ○ | × | × |
secondary | ○ | × | × |
IP アドレス | ○ | ○ | ○ |
map-e | × | × | ○ |
設定値 | 説明 |
---|---|
v6plus | 「v6プラス」 |
ocn | OCNバーチャルコネクト |
tunnel1# show status tunnel TUNNEL[1]: 説明: インタフェースの種類: MAP-E IPv6: 2403:9200:fff0:7:cb:56e1:f0f:f000 トンネルインタフェースは接続されています 開始: 2018/01/19 15:53:05 通信時間: 28分50秒 受信: (IPv4) 2 パケット [184 オクテット] (IPv6) 0 パケット [0 オクテット] 送信: (IPv4) 2 パケット [184 オクテット] (IPv6) 0 パケット [0 オクテット]show nat descriptor addressコマンドでは、以下のように表示されます。
# show nat descriptor address NAT/IPマスカレード 動作タイプ : 2 参照NATディスクリプタ : 1, 適用インタフェース : LAN2(1) Masqueradeテーブル 外側アドレス: map-e/203.86.225.15 ポート範囲: 8176-8177, 12272-12273, 16368-16369, 20464-20465, 24560-24561, 28656-28657, 32752-32753, 36848-36849, 40944-40945, 45040-45041, 49136-49137, 5 3232-53233, 57328-57329, 61424-61425, 65520-65521 43 セッション -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- No. 内側アドレス セッション数 ホスト毎制限数 種別 1 192.168.10.240 41 65534 dynamic 2 192.168.10.1 1 65534 dynamic 3 192.168.10.2 1 65534 dynamic --------------------- 有効なNATディスクリプタテーブルが1個ありました※マップルールが取得できていない時は、外側アドレスやポート範囲の情報は表示されません。
光回線 | 契約 | WAN側の接続機器 | 確認事項 | 設定例 | |
---|---|---|---|---|---|
フレッツ 光ネクスト | 動的IP契約 | ONU | ひかり電話契約 なし | 1 | |
ひかり電話契約 あり | 2 | ||||
ホームゲートウェイ | - | 1 | |||
固定IP1契約 | ONU | ひかり電話契約 なし | 3 | ||
ひかり電話契約 あり | 4 | ||||
ホームゲートウェイ | - | 3 | |||
固定IP8/16契約 | ONU | ひかり電話契約 なし | LAN側でグローバルIPv4アドレスを使用する場合 | 5 | |
LAN側でグローバルIPv4アドレスと プライベートIPv4アドレスを使用する場合 |
7 | ||||
ひかり電話契約 あり | LAN側でグローバルIPv4アドレスを使用する場合 | 6 | |||
LAN側でグローバルIPv4アドレスと プライベートIPv4アドレスを使用する場合 |
8 | ||||
ホームゲートウェイ | LAN側でグローバルIPv4アドレスを使用する場合 | 5 | |||
LAN側でグローバルIPv4アドレスとプライベートIPv4アドレスを使用する場合 | 7 | ||||
フレッツ 光クロス | 動的IP契約 | ONU | - | 2 | |
ホームゲートウェイ | - | 1 | |||
固定IP1契約 | ONU | - | 4 | ||
ホームゲートウェイ | - | 3 | |||
固定IP8/16契約 | ONU | LAN側でグローバルIPv4アドレスを使用する場合 | 6 | ||
LAN側でグローバルIPv4アドレスとプライベートIPv4アドレスを使用する場合 | 8 | ||||
ホームゲートウェイ | LAN側でグローバルIPv4アドレスを使用する場合 | 5 | |||
LAN側でグローバルIPv4アドレスとプライベートIPv4アドレスを使用する場合 | 7 |
LAN1 | IPv4アドレス | 192.168.100.1/24 |
IPv6アドレス | (RAで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | なし |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address 192.168.100.1/24 【NGNとの接続設定】(※1) ngn type lan2 ntt ipv6 prefix 1 ra-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address ra-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 dhcp service client ir=on 【MAP-Eの設定】(※2) tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 ip tunnel nat descriptor 1000 tunnel enable 1 nat descriptor type 1000 masquerade nat descriptor address outer 1000 map-e 【DHCPの設定】 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.191/24 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 tunnel select 1 ip tunnel secure filter in 200030 200039 ip tunnel secure filter out 200097 200098 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * 192.168.100.0/24 icmp * * ip filter 200039 reject * ip filter 200097 pass * * icmp * * ip filter 200098 pass * * tcp * * ip filter 200099 pass * * udp * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp |
(※1) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 ra-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
(※2) RTX5000/3500 では、以下を設定してください。
・nat descriptor backward-compatibility 2
LAN1 | IPv4アドレス | 192.168.100.1/24 |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::(EUI-64で生成されたインターフェースID)/64 |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address 192.168.100.1/24 【NGNとの接続設定】(※1) ngn type lan2 ntt ipv6 route default gateway dhcp lan2 ipv6 prefix 1 dhcp-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address dhcp-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 address dhcp ipv6 lan2 dhcp service client 【MAP-Eの設定】(※2) tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 ip tunnel nat descriptor 1000 tunnel enable 1 nat descriptor type 1000 masquerade nat descriptor address outer 1000 map-e 【DHCPの設定】 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.191/24 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 tunnel select 1 ip tunnel secure filter in 200030 200039 ip tunnel secure filter out 200097 200098 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * 192.168.100.0/24 icmp * * ip filter 200039 reject * ip filter 200097 pass * * icmp * * ip filter 200098 pass * * tcp * * ip filter 200099 pass * * udp * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp |
(※1) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 dhcp-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
(※2) RTX5000/3500 では、以下を設定してください。
・nat descriptor backward-compatibility 2
LAN1 | IPv4アドレス | 192.168.100.1/24 |
IPv6アドレス | (RAで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | なし |
SERVER_URL | アドレス解決システムURL |
USERNAME | アドレス解決システム認証用ID |
PASSWORD | アドレス解決システム認証用パスワード |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address 192.168.100.1/24 【NGNとの接続設定】(※) ngn type lan2 ntt ipv6 prefix 1 ra-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address ra-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 dhcp service client ir=on 【MAP-Eの設定】 tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 ip tunnel nat descriptor 1000 tunnel enable 1 nat descriptor type 1000 masquerade nat descriptor address outer 1000 map-e # NAT/IPマスカレードの設定は必要に応じて設定を追加してください 【DHCPの設定】 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.191/24 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 tunnel select 1 ip tunnel secure filter in 200030 200039 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * 192.168.100.0/24 icmp * * ip filter 200039 reject * ip filter 200099 pass * * * * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp 【IPv6アドレスの通知設定】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua emfs:/ocn_address_notification.lua embedded file ocn_address_notification.lua <<EOF --[[ ■ OCNバーチャルコネクト IPv6アドレス通知用 サンプルスクリプト Ver. 1.01 2022.04.04 ヤマハ株式会社 本スクリプトは、OCNバーチャルコネクト の 固定IP1/8/16契約において、 指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、 アドレス解決サーバーにIPv6アドレスの更新通知を行うLuaスクリプトのサンプルです。 新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下 のログが出力された場合に検知しています。 (IPv6アドレスがLAN1に設定されている場合の例) Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by DHCPv6 Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by RA 以下のコマンドが設定されていないと、上記ログは出力されないため、 必ず設定するようにしてください。 ipv6 lan1 prefix change log on [注意事項] ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし てください。 ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 [更新履歴] 2021.04.01 Ver.1.00 初版作成 2022.04.04 Ver.1.01 HTTPリクエストを実行前に2秒待機する処理を追加 リナンバリング時などにIPv6アドレス生成処理を待機するため ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アドレス解決システムのURL SERVER_URL = "アドレス解決システムURL" -- ユーザー名 USERNAME = "アドレス解決システム認証用ID" -- パスワード PASSWORD = "アドレス解決システム認証用パスワード" -- アドレス解決用ホスト名(省略時は自動設定、接続に問題がある場合に設定する) HOSTNAME = "" -- IPv6アドレスを設定するインターフェース名 IPv6_IF = "LAN1" -- IPv6プレフィックスが追加されたときのSYSLOGパターン LOG_PTN1 = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by" -- リンクアップしたときのSYSLOGパターン LOG_PTN2 = "LAN2: link up" -- WAN に LAN3 をご利用の場合 -- LOG_PTN2 = "LAN3: link up" -- リンクアップしたときのSYSLOGパターン LOG_PTN3 = "%[OCN MAP%-E%] hostname=" -- 上記3つを同時に検出するパターン PTN = /(Add IPv6 prefix|LAN2: link up|hostname=)/ -- WAN に LAN3 をご利用の場合 -- PTN = /(Add IPv6 prefix|LAN3: link up|hostname=)/ -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[OCN MAP-E]" ---------------------------------------- -- SYSLOGを出力する関数 -- ---------------------------------------- function logger(msg) rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg)) end ---------------------------------------- -- リトライ間隔を計算する関数 -- ---------------------------------------- function retry_timer(t, c) return (t * 2 * c) end ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, str, count, log, sleep_time, hostname, tmp local req_t = {} local res_t -------------------- -- 初期化 math.randomseed(os.time()) -- HTTPリクエストの準備 req_t.method = "GET" req_t.auth_type = "basic" req_t.auth_name = USERNAME req_t.auth_pass = PASSWORD -------------------- -- 監視 if string.len(HOSTNAME) == 0 then rtn, str = rt.syslogwatch(LOG_PTN3, 1, 30) if (rtn > 0) then tmp, hostname = string.split(str[1], "=") end else hostname = HOSTNAME rt.sleep(5) end while true do count = 1 while hostname do req_t.url = string.format("%s?hostname=%s", SERVER_URL, hostname) -- HTTPリクエストを実行 rt.sleep(2) res_t = rt.httprequest(req_t) logger("アドレス解決サーバーへの通知を実行しました。") -- リクエストに成功 if res_t.rtn1 then -- アップデートの結果をログに出力する if res_t.code == 200 then if string.match(res_t.body, "good") or string.match(res_t.body, "nochg") or string.match(res_t.body, "nohost") then log = string.format("アドレス解決サーバーへの通知に成功しました。(code=%d)", res_t.code) logger(log) -- ループを抜け、SYSLOGの監視を再開する break end end log = string.format("アドレス解決サーバーへの通知に失敗しました。(code=%d)", res_t.code) logger(log) else logger("アドレス解決サーバーから応答がありません。") end -- 再送時間設定 sleep_time = retry_timer(60, count) if (sleep_time > 3600) then sleep_time = 3600 else count = count * 2 end rt.sleep(sleep_time) end -- 定期的に通知する(12-24時間後) sleep_time = math.random(43200, 86400) rtn, str = rt.syslogwatch(PTN, 1, sleep_time) if (rtn > 0) and string.match(str[1], LOG_PTN3) then tmp, hostname = string.split(str[1], "=") elseif (rtn > 0) and string.match(str[1], LOG_PTN2) then rt.sleep(5) end end EOF |
(※) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 ra-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
LAN1 | IPv4アドレス | 192.168.100.1/24 |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::(EUI-64で生成されたインターフェースID)/64 |
SERVER_URL | アドレス解決システムURL |
USERNAME | アドレス解決システム認証用ID |
PASSWORD | アドレス解決システム認証用パスワード |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address 192.168.100.1/24 【NGNとの接続設定】(※) ngn type lan2 ntt ipv6 route default gateway dhcp lan2 ipv6 prefix 1 dhcp-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address dhcp-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 address dhcp ipv6 lan2 dhcp service client 【MAP-Eの設定】 tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 ip tunnel nat descriptor 1000 tunnel enable 1 nat descriptor type 1000 masquerade nat descriptor address outer 1000 map-e # NAT/IPマスカレードの設定は必要に応じて設定を追加してください 【DHCPの設定】 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.191/24 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 tunnel select 1 ip tunnel secure filter in 200030 200039 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * 192.168.100.0/24 icmp * * ip filter 200039 reject * ip filter 200099 pass * * * * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp 【IPv6アドレスの通知設定】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua emfs:/ocn_address_notification.lua embedded file ocn_address_notification.lua <<EOF --[[ ■ OCNバーチャルコネクト IPv6アドレス通知用 サンプルスクリプト Ver. 1.01 2022.04.04 ヤマハ株式会社 本スクリプトは、OCNバーチャルコネクト の 固定IP1/8/16契約 において、 指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、 アドレス解決サーバーにIPv6アドレスの更新通知を行うLuaスクリプトのサンプルです。 新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下 のログが出力された場合に検知しています。 (IPv6アドレスがLAN1に設定されている場合の例) Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by DHCPv6 Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by RA 以下のコマンドが設定されていないと、上記ログは出力されないため、 必ず設定するようにしてください。 ipv6 lan1 prefix change log on [注意事項] ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし てください。 ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 [更新履歴] 2021.04.01 Ver.1.00 初版作成 2022.04.04 Ver.1.01 HTTPリクエストを実行前に2秒待機する処理を追加 リナンバリング時などにIPv6アドレス生成処理を待機するため ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アドレス解決システムのURL SERVER_URL = "アドレス解決システムURL" -- ユーザー名 USERNAME = "アドレス解決システム認証用ID" -- パスワード PASSWORD = "アドレス解決システム認証用パスワード" -- アドレス解決用ホスト名(省略時は自動設定、接続に問題がある場合に設定する) HOSTNAME = "" -- IPv6アドレスを設定するインターフェース名 IPv6_IF = "LAN1" -- IPv6プレフィックスが追加されたときのSYSLOGパターン LOG_PTN1 = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by" -- リンクアップしたときのSYSLOGパターン LOG_PTN2 = "LAN2: link up" -- WAN に LAN3 をご利用の場合 -- LOG_PTN2 = "LAN3: link up" -- リンクアップしたときのSYSLOGパターン LOG_PTN3 = "%[OCN MAP%-E%] hostname=" -- 上記3つを同時に検出するパターン PTN = /(Add IPv6 prefix|LAN2: link up|hostname=)/ -- WAN に LAN3 をご利用の場合 -- PTN = /(Add IPv6 prefix|LAN3: link up|hostname=)/ -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[OCN MAP-E]" ---------------------------------------- -- SYSLOGを出力する関数 -- ---------------------------------------- function logger(msg) rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg)) end ---------------------------------------- -- リトライ間隔を計算する関数 -- ---------------------------------------- function retry_timer(t, c) return (t * 2 * c) end ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, str, count, log, sleep_time, hostname, tmp local req_t = {} local res_t -------------------- -- 初期化 math.randomseed(os.time()) -- HTTPリクエストの準備 req_t.method = "GET" req_t.auth_type = "basic" req_t.auth_name = USERNAME req_t.auth_pass = PASSWORD -------------------- -- 監視 if string.len(HOSTNAME) == 0 then rtn, str = rt.syslogwatch(LOG_PTN3, 1, 30) if (rtn > 0) then tmp, hostname = string.split(str[1], "=") end else hostname = HOSTNAME rt.sleep(5) end while true do count = 1 while hostname do req_t.url = string.format("%s?hostname=%s", SERVER_URL, hostname) -- HTTPリクエストを実行 rt.sleep(2) res_t = rt.httprequest(req_t) logger("アドレス解決サーバーへの通知を実行しました。") -- リクエストに成功 if res_t.rtn1 then -- アップデートの結果をログに出力する if res_t.code == 200 then if string.match(res_t.body, "good") or string.match(res_t.body, "nochg") or string.match(res_t.body, "nohost") then log = string.format("アドレス解決サーバーへの通知に成功しました。(code=%d)", res_t.code) logger(log) -- ループを抜け、SYSLOGの監視を再開する break end end log = string.format("アドレス解決サーバーへの通知に失敗しました。(code=%d)", res_t.code) logger(log) else logger("アドレス解決サーバーから応答がありません。") end -- 再送時間設定 sleep_time = retry_timer(60, count) if (sleep_time > 3600) then sleep_time = 3600 else count = count * 2 end rt.sleep(sleep_time) end -- 定期的に通知する(12-24時間後) sleep_time = math.random(43200, 86400) rtn, str = rt.syslogwatch(PTN, 1, sleep_time) if (rtn > 0) and string.match(str[1], LOG_PTN3) then tmp, hostname = string.split(str[1], "=") elseif (rtn > 0) and string.match(str[1], LOG_PTN2) then rt.sleep(5) end end EOF |
(※) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 dhcp-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
SERVER_URL | アドレス解決システムURL |
USERNAME | アドレス解決システム認証用ID |
PASSWORD | アドレス解決システム認証用パスワード |
IPv4アドレス | (xxx.xxx.xxx.0)/29 |
LAN1 | IPv4アドレス | (xxx.xxx.xxx.1)/29 |
IPv6アドレス | (RAで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | なし |
IPv4アドレス | (xxx.xxx.xxx.2-6)/29 |
デフォルトゲートウェイ | (xxx.xxx.xxx.1) |
DNSサーバー | (xxx.xxx.xxx.1) |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address (xxx.xxx.xxx.1)/29 【NGNとの接続設定】(※) ngn type lan2 ntt ipv6 prefix 1 ra-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address ra-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 dhcp service client ir=on 【MAP-Eの設定】 tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 tunnel enable 1 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 # LAN1のグローバルIPv4アドレスへのアクセスを許可する必要がある場合は、inフィルターを適宜追加してください tunnel select 1 ip tunnel secure filter in 200030 200039 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * (xxx.xxx.xxx.0)/29 icmp * * ip filter 200039 reject * ip filter 200099 pass * * * * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp 【IPv6アドレスの通知設定】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua emfs:/ocn_address_notification.lua embedded file ocn_address_notification.lua <<EOF --[[ ■ OCNバーチャルコネクト IPv6アドレス通知用 サンプルスクリプト Ver. 1.01 2022.04.04 ヤマハ株式会社 本スクリプトは、OCNバーチャルコネクト の 固定IP1/8/16契約 において、 指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、 アドレス解決サーバーにIPv6アドレスの更新通知を行うLuaスクリプトのサンプルです。 新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下 のログが出力された場合に検知しています。 (IPv6アドレスがLAN1に設定されている場合の例) Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by DHCPv6 Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by RA 以下のコマンドが設定されていないと、上記ログは出力されないため、 必ず設定するようにしてください。 ipv6 lan1 prefix change log on [注意事項] ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし てください。 ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 [更新履歴] 2021.04.01 Ver.1.00 初版作成 2022.04.04 Ver.1.01 HTTPリクエストを実行前に2秒待機する処理を追加 リナンバリング時などにIPv6アドレス生成処理を待機するため ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アドレス解決システムのURL SERVER_URL = "アドレス解決システムURL" -- ユーザー名 USERNAME = "アドレス解決システム認証用ID" -- パスワード PASSWORD = "アドレス解決システム認証用パスワード" -- アドレス解決用ホスト名(省略時は自動設定、接続に問題がある場合に設定する) HOSTNAME = "" -- IPv6アドレスを設定するインターフェース名 IPv6_IF = "LAN1" -- IPv6プレフィックスが追加されたときのSYSLOGパターン LOG_PTN1 = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by" -- リンクアップしたときのSYSLOGパターン LOG_PTN2 = "LAN2: link up" -- WAN に LAN3 をご利用の場合 -- LOG_PTN2 = "LAN3: link up" -- リンクアップしたときのSYSLOGパターン LOG_PTN3 = "%[OCN MAP%-E%] hostname=" -- 上記3つを同時に検出するパターン PTN = /(Add IPv6 prefix|LAN2: link up|hostname=)/ -- WAN に LAN3 をご利用の場合 -- PTN = /(Add IPv6 prefix|LAN3: link up|hostname=)/ -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[OCN MAP-E]" ---------------------------------------- -- SYSLOGを出力する関数 -- ---------------------------------------- function logger(msg) rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg)) end ---------------------------------------- -- リトライ間隔を計算する関数 -- ---------------------------------------- function retry_timer(t, c) return (t * 2 * c) end ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, str, count, log, sleep_time, hostname, tmp local req_t = {} local res_t -------------------- -- 初期化 math.randomseed(os.time()) -- HTTPリクエストの準備 req_t.method = "GET" req_t.auth_type = "basic" req_t.auth_name = USERNAME req_t.auth_pass = PASSWORD -------------------- -- 監視 if string.len(HOSTNAME) == 0 then rtn, str = rt.syslogwatch(LOG_PTN3, 1, 30) if (rtn > 0) then tmp, hostname = string.split(str[1], "=") end else hostname = HOSTNAME rt.sleep(5) end while true do count = 1 while hostname do req_t.url = string.format("%s?hostname=%s", SERVER_URL, hostname) -- HTTPリクエストを実行 rt.sleep(2) res_t = rt.httprequest(req_t) logger("アドレス解決サーバーへの通知を実行しました。") -- リクエストに成功 if res_t.rtn1 then -- アップデートの結果をログに出力する if res_t.code == 200 then if string.match(res_t.body, "good") or string.match(res_t.body, "nochg") or string.match(res_t.body, "nohost") then log = string.format("アドレス解決サーバーへの通知に成功しました。(code=%d)", res_t.code) logger(log) -- ループを抜け、SYSLOGの監視を再開する break end end log = string.format("アドレス解決サーバーへの通知に失敗しました。(code=%d)", res_t.code) logger(log) else logger("アドレス解決サーバーから応答がありません。") end -- 再送時間設定 sleep_time = retry_timer(60, count) if (sleep_time > 3600) then sleep_time = 3600 else count = count * 2 end rt.sleep(sleep_time) end -- 定期的に通知する(12-24時間後) sleep_time = math.random(43200, 86400) rtn, str = rt.syslogwatch(PTN, 1, sleep_time) if (rtn > 0) and string.match(str[1], LOG_PTN3) then tmp, hostname = string.split(str[1], "=") elseif (rtn > 0) and string.match(str[1], LOG_PTN2) then rt.sleep(5) end end EOF |
(※) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 ra-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
SERVER_URL | アドレス解決システムURL |
USERNAME | アドレス解決システム認証用ID |
PASSWORD | アドレス解決システム認証用パスワード |
IPv4アドレス | (xxx.xxx.xxx.0)/29 |
LAN1 | IPv4アドレス | (xxx.xxx.xxx.1)/29 |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::(EUI-64で生成されたインターフェースID)/64 |
IPv4アドレス | (xxx.xxx.xxx.2-6)/29 |
デフォルトゲートウェイ | (xxx.xxx.xxx.1) |
DNSサーバー | (xxx.xxx.xxx.1) |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address (xxx.xxx.xxx.1)/29 【NGNとの接続設定】(※) ngn type lan2 ntt ipv6 route default gateway dhcp lan2 ipv6 prefix 1 dhcp-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address dhcp-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 address dhcp ipv6 lan2 dhcp service client 【MAP-Eの設定】 tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 tunnel enable 1 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 # LAN1のグローバルIPv4アドレスへのアクセスを許可する必要がある場合は、inフィルターを適宜追加してください tunnel select 1 ip tunnel secure filter in 200030 200039 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * (xxx.xxx.xxx.0)/29 icmp * * ip filter 200039 reject * ip filter 200099 pass * * * * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp 【IPv6アドレスの通知設定】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua emfs:/ocn_address_notification.lua embedded file ocn_address_notification.lua <<EOF --[[ ■ OCNバーチャルコネクト IPv6アドレス通知用 サンプルスクリプト Ver. 1.01 2022.04.04 ヤマハ株式会社 本スクリプトは、OCNバーチャルコネクト の 固定IP1/8/16契約 において、 指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、 アドレス解決サーバーにIPv6アドレスの更新通知を行うLuaスクリプトのサンプルです。 新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下 のログが出力された場合に検知しています。 (IPv6アドレスがLAN1に設定されている場合の例) Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by DHCPv6 Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by RA 以下のコマンドが設定されていないと、上記ログは出力されないため、 必ず設定するようにしてください。 ipv6 lan1 prefix change log on [注意事項] ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし てください。 ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 [更新履歴] 2021.04.01 Ver.1.00 初版作成 2022.04.04 Ver.1.01 HTTPリクエストを実行前に2秒待機する処理を追加 リナンバリング時などにIPv6アドレス生成処理を待機するため ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アドレス解決システムのURL SERVER_URL = "アドレス解決システムURL" -- ユーザー名 USERNAME = "アドレス解決システム認証用ID" -- パスワード PASSWORD = "アドレス解決システム認証用パスワード" -- アドレス解決用ホスト名(省略時は自動設定、接続に問題がある場合に設定する) HOSTNAME = "" -- IPv6アドレスを設定するインターフェース名 IPv6_IF = "LAN1" -- IPv6プレフィックスが追加されたときのSYSLOGパターン LOG_PTN1 = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by" -- リンクアップしたときのSYSLOGパターン LOG_PTN2 = "LAN2: link up" -- WAN に LAN3 をご利用の場合 -- LOG_PTN2 = "LAN3: link up" -- リンクアップしたときのSYSLOGパターン LOG_PTN3 = "%[OCN MAP%-E%] hostname=" -- 上記3つを同時に検出するパターン PTN = /(Add IPv6 prefix|LAN2: link up|hostname=)/ -- WAN に LAN3 をご利用の場合 -- PTN = /(Add IPv6 prefix|LAN3: link up|hostname=)/ -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[OCN MAP-E]" ---------------------------------------- -- SYSLOGを出力する関数 -- ---------------------------------------- function logger(msg) rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg)) end ---------------------------------------- -- リトライ間隔を計算する関数 -- ---------------------------------------- function retry_timer(t, c) return (t * 2 * c) end ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, str, count, log, sleep_time, hostname, tmp local req_t = {} local res_t -------------------- -- 初期化 math.randomseed(os.time()) -- HTTPリクエストの準備 req_t.method = "GET" req_t.auth_type = "basic" req_t.auth_name = USERNAME req_t.auth_pass = PASSWORD -------------------- -- 監視 if string.len(HOSTNAME) == 0 then rtn, str = rt.syslogwatch(LOG_PTN3, 1, 30) if (rtn > 0) then tmp, hostname = string.split(str[1], "=") end else hostname = HOSTNAME rt.sleep(5) end while true do count = 1 while hostname do req_t.url = string.format("%s?hostname=%s", SERVER_URL, hostname) -- HTTPリクエストを実行 rt.sleep(2) res_t = rt.httprequest(req_t) logger("アドレス解決サーバーへの通知を実行しました。") -- リクエストに成功 if res_t.rtn1 then -- アップデートの結果をログに出力する if res_t.code == 200 then if string.match(res_t.body, "good") or string.match(res_t.body, "nochg") or string.match(res_t.body, "nohost") then log = string.format("アドレス解決サーバーへの通知に成功しました。(code=%d)", res_t.code) logger(log) -- ループを抜け、SYSLOGの監視を再開する break end end log = string.format("アドレス解決サーバーへの通知に失敗しました。(code=%d)", res_t.code) logger(log) else logger("アドレス解決サーバーから応答がありません。") end -- 再送時間設定 sleep_time = retry_timer(60, count) if (sleep_time > 3600) then sleep_time = 3600 else count = count * 2 end rt.sleep(sleep_time) end -- 定期的に通知する(12-24時間後) sleep_time = math.random(43200, 86400) rtn, str = rt.syslogwatch(PTN, 1, sleep_time) if (rtn > 0) and string.match(str[1], LOG_PTN3) then tmp, hostname = string.split(str[1], "=") elseif (rtn > 0) and string.match(str[1], LOG_PTN2) then rt.sleep(5) end end EOF |
(※) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 dhcp-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
SERVER_URL | アドレス解決システムURL |
USERNAME | アドレス解決システム認証用ID |
PASSWORD | アドレス解決システム認証用パスワード |
IPv4アドレス | (xxx.xxx.xxx.0)/29 |
LAN1 | IPv4アドレス | 192.168.100.1/24 |
IPv6アドレス | (RAで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | なし | |
LAN3 | IPv4アドレス | (xxx.xxx.xxx.1)/29 |
IPv6アドレス | なし |
IPv4アドレス | (xxx.xxx.xxx.2-6)/29 |
デフォルトゲートウェイ | (xxx.xxx.xxx.1) |
DNSサーバー | (xxx.xxx.xxx.1) |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address 192.168.100.1/24 ip lan3 address (xxx.xxx.xxx.1)/29 【NGNとの接続設定】(※) ngn type lan2 ntt ipv6 prefix 1 ra-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address ra-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 dhcp service client ir=on 【MAP-Eの設定】 tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 ip tunnel nat descriptor 1000 tunnel enable 1 【NAT設定】 nat descriptor type 1000 masquerade nat descriptor address outer 1000 map-e nat descriptor address inner 1000 192.168.100.1-192.168.100.254 【DHCPの設定】 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.191/24 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 # LAN3のグローバルアドレスへのアクセスを許可する必要がある場合は、inフィルターを適宜追加してください tunnel select 1 ip tunnel secure filter in 200030 200031 200039 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * 192.168.100.0/24 icmp * * ip filter 200031 pass * (xxx.xxx.xxx.0)/29 icmp * * ip filter 200039 reject * ip filter 200099 pass * * * * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp 【IPv6アドレスの通知設定】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua emfs:/ocn_address_notification.lua embedded file ocn_address_notification.lua <<EOF --[[ ■ OCNバーチャルコネクト IPv6アドレス通知用 サンプルスクリプト Ver. 1.01 2022.04.04 ヤマハ株式会社 本スクリプトは、OCNバーチャルコネクト の 固定IP1/8/16契約 において、 指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、 アドレス解決サーバーにIPv6アドレスの更新通知を行うLuaスクリプトのサンプルです。 新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下 のログが出力された場合に検知しています。 (IPv6アドレスがLAN1に設定されている場合の例) Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by DHCPv6 Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by RA 以下のコマンドが設定されていないと、上記ログは出力されないため、 必ず設定するようにしてください。 ipv6 lan1 prefix change log on [注意事項] ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし てください。 ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 [更新履歴] 2021.04.01 Ver.1.00 初版作成 2022.04.04 Ver.1.01 HTTPリクエストを実行前に2秒待機する処理を追加 リナンバリング時などにIPv6アドレス生成処理を待機するため ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アドレス解決システムのURL SERVER_URL = "アドレス解決システムURL" -- ユーザー名 USERNAME = "アドレス解決システム認証用ID" -- パスワード PASSWORD = "アドレス解決システム認証用パスワード" -- アドレス解決用ホスト名(省略時は自動設定、接続に問題がある場合に設定する) HOSTNAME = "" -- IPv6アドレスを設定するインターフェース名 IPv6_IF = "LAN1" -- IPv6プレフィックスが追加されたときのSYSLOGパターン LOG_PTN1 = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by" -- リンクアップしたときのSYSLOGパターン LOG_PTN2 = "LAN2: link up" -- WAN に LAN3 をご利用の場合 -- LOG_PTN2 = "LAN3: link up" -- リンクアップしたときのSYSLOGパターン LOG_PTN3 = "%[OCN MAP%-E%] hostname=" -- 上記3つを同時に検出するパターン PTN = /(Add IPv6 prefix|LAN2: link up|hostname=)/ -- WAN に LAN3 をご利用の場合 -- PTN = /(Add IPv6 prefix|LAN3: link up|hostname=)/ -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[OCN MAP-E]" ---------------------------------------- -- SYSLOGを出力する関数 -- ---------------------------------------- function logger(msg) rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg)) end ---------------------------------------- -- リトライ間隔を計算する関数 -- ---------------------------------------- function retry_timer(t, c) return (t * 2 * c) end ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, str, count, log, sleep_time, hostname, tmp local req_t = {} local res_t -------------------- -- 初期化 math.randomseed(os.time()) -- HTTPリクエストの準備 req_t.method = "GET" req_t.auth_type = "basic" req_t.auth_name = USERNAME req_t.auth_pass = PASSWORD -------------------- -- 監視 if string.len(HOSTNAME) == 0 then rtn, str = rt.syslogwatch(LOG_PTN3, 1, 30) if (rtn > 0) then tmp, hostname = string.split(str[1], "=") end else hostname = HOSTNAME rt.sleep(5) end while true do count = 1 while hostname do req_t.url = string.format("%s?hostname=%s", SERVER_URL, hostname) -- HTTPリクエストを実行 rt.sleep(2) res_t = rt.httprequest(req_t) logger("アドレス解決サーバーへの通知を実行しました。") -- リクエストに成功 if res_t.rtn1 then -- アップデートの結果をログに出力する if res_t.code == 200 then if string.match(res_t.body, "good") or string.match(res_t.body, "nochg") or string.match(res_t.body, "nohost") then log = string.format("アドレス解決サーバーへの通知に成功しました。(code=%d)", res_t.code) logger(log) -- ループを抜け、SYSLOGの監視を再開する break end end log = string.format("アドレス解決サーバーへの通知に失敗しました。(code=%d)", res_t.code) logger(log) else logger("アドレス解決サーバーから応答がありません。") end -- 再送時間設定 sleep_time = retry_timer(60, count) if (sleep_time > 3600) then sleep_time = 3600 else count = count * 2 end rt.sleep(sleep_time) end -- 定期的に通知する(12-24時間後) sleep_time = math.random(43200, 86400) rtn, str = rt.syslogwatch(PTN, 1, sleep_time) if (rtn > 0) and string.match(str[1], LOG_PTN3) then tmp, hostname = string.split(str[1], "=") elseif (rtn > 0) and string.match(str[1], LOG_PTN2) then rt.sleep(5) end end EOF |
(※) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 ra-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
SERVER_URL | アドレス解決システムURL |
USERNAME | アドレス解決システム認証用ID |
PASSWORD | アドレス解決システム認証用パスワード |
IPv4アドレス | (xxx.xxx.xxx.0)/29 |
LAN1 | IPv4アドレス | 192.168.100.1/24 |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::1/64 | |
LAN2 | IPv4アドレス | なし |
IPv6アドレス | (DHCPv6-PDで取得したプレフィックス)::(EUI-64で生成されたインターフェースID)/64 | |
LAN3 | IPv4アドレス | (xxx.xxx.xxx.1)/29 |
IPv6アドレス | なし |
IPv4アドレス | (xxx.xxx.xxx.2-6)/29 |
デフォルトゲートウェイ | (xxx.xxx.xxx.1) |
DNSサーバー | (xxx.xxx.xxx.1) |
【経路設定】 ip route default gateway tunnel 1 【LAN設定】 ip lan1 address 192.168.100.1/24 ip lan3 address (xxx.xxx.xxx.1)/29 【NGNとの接続設定】(※) ngn type lan2 ntt ipv6 route default gateway dhcp lan2 ipv6 prefix 1 dhcp-prefix@lan2::/64 ipv6 source address selection rule lifetime ipv6 lan1 address dhcp-prefix@lan2::1/64 ipv6 lan1 rtadv send 1 o_flag=on ipv6 lan1 dhcp service server ipv6 lan2 address dhcp ipv6 lan2 dhcp service client 【MAP-Eの設定】 tunnel select 1 tunnel encapsulation map-e tunnel map-e type ocn ip tunnel mtu 1460 ip tunnel nat descriptor 1000 tunnel enable 1 【NAT設定】 nat descriptor type 1000 masquerade nat descriptor address outer 1000 map-e nat descriptor address inner 1000 192.168.100.1-192.168.100.254 【DHCPの設定】 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.191/24 【DNSの設定】 dns server dhcp lan2 【IPv4フィルター関連設定】 # LAN3のグローバルアドレスへのアクセスを許可する必要がある場合は、inフィルターを適宜追加してください tunnel select 1 ip tunnel secure filter in 200030 200031 200039 ip tunnel secure filter out 200099 dynamic 200080 200082 200083 200084 200098 200099 tunnel enable 1 ip filter 200030 pass * 192.168.100.0/24 icmp * * ip filter 200031 pass * (xxx.xxx.xxx.0)/29 icmp * * ip filter 200039 reject * ip filter 200099 pass * * * * * ip filter dynamic 200080 * * ftp ip filter dynamic 200082 * * www ip filter dynamic 200083 * * smtp ip filter dynamic 200084 * * pop3 ip filter dynamic 200098 * * tcp ip filter dynamic 200099 * * udp 【IPv6フィルター関連設定】 ipv6 lan2 secure filter in 200030 200031 200038 200039 ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099 ipv6 filter 200030 pass * * icmp6 * * ipv6 filter 200031 pass * * 4 ipv6 filter 200038 pass * * udp * 546 ipv6 filter 200039 reject * ipv6 filter 200099 pass * * * * * ipv6 filter dynamic 200080 * * ftp ipv6 filter dynamic 200081 * * domain ipv6 filter dynamic 200082 * * www ipv6 filter dynamic 200083 * * smtp ipv6 filter dynamic 200084 * * pop3 ipv6 filter dynamic 200098 * * tcp ipv6 filter dynamic 200099 * * udp 【IPv6アドレスの通知設定】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua emfs:/ocn_address_notification.lua embedded file ocn_address_notification.lua <<EOF --[[ ■ OCNバーチャルコネクト IPv6アドレス通知用 サンプルスクリプト Ver. 1.01 2022.04.04 ヤマハ株式会社 本スクリプトは、OCNバーチャルコネクト の 固定IP1/8/16契約 において、 指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、 アドレス解決サーバーにIPv6アドレスの更新通知を行うLuaスクリプトのサンプルです。 新しいIPv6プレフィックスが付与されたことは、ルーターのSYSLOGを監視し、以下 のログが出力された場合に検知しています。 (IPv6アドレスがLAN1に設定されている場合の例) Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by DHCPv6 Add IPv6 prefix xxxx:xxxx:xxxx:xxxx::/xx (Lifetime: xxxxxx) via LAN1 by RA 以下のコマンドが設定されていないと、上記ログは出力されないため、 必ず設定するようにしてください。 ipv6 lan1 prefix change log on [注意事項] ・本スクリプトは、schedule atコマンドでルーターの起動時に実行されるようにし てください。 ・スクリプト中の「設定値」の値は、ご使用の環境に応じて変更した上でご使用く ださい。 [更新履歴] 2021.04.01 Ver.1.00 初版作成 2022.04.04 Ver.1.01 HTTPリクエストを実行前に2秒待機する処理を追加 リナンバリング時などにIPv6アドレス生成処理を待機するため ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アドレス解決システムのURL SERVER_URL = "アドレス解決システムURL" -- ユーザー名 USERNAME = "アドレス解決システム認証用ID" -- パスワード PASSWORD = "アドレス解決システム認証用パスワード" -- アドレス解決用ホスト名(省略時は自動設定、接続に問題がある場合に設定する) HOSTNAME = "" -- IPv6アドレスを設定するインターフェース名 IPv6_IF = "LAN1" -- IPv6プレフィックスが追加されたときのSYSLOGパターン LOG_PTN1 = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by" -- リンクアップしたときのSYSLOGパターン LOG_PTN2 = "LAN2: link up" -- WAN に LAN3 をご利用の場合 -- LOG_PTN2 = "LAN3: link up" -- リンクアップしたときのSYSLOGパターン LOG_PTN3 = "%[OCN MAP%-E%] hostname=" -- 上記3つを同時に検出するパターン PTN = /(Add IPv6 prefix|LAN2: link up|hostname=)/ -- WAN に LAN3 をご利用の場合 -- PTN = /(Add IPv6 prefix|LAN3: link up|hostname=)/ -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[OCN MAP-E]" ---------------------------------------- -- SYSLOGを出力する関数 -- ---------------------------------------- function logger(msg) rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg)) end ---------------------------------------- -- リトライ間隔を計算する関数 -- ---------------------------------------- function retry_timer(t, c) return (t * 2 * c) end ---------------------------------------- -- メインルーチン -- ---------------------------------------- local rtn, str, count, log, sleep_time, hostname, tmp local req_t = {} local res_t -------------------- -- 初期化 math.randomseed(os.time()) -- HTTPリクエストの準備 req_t.method = "GET" req_t.auth_type = "basic" req_t.auth_name = USERNAME req_t.auth_pass = PASSWORD -------------------- -- 監視 if string.len(HOSTNAME) == 0 then rtn, str = rt.syslogwatch(LOG_PTN3, 1, 30) if (rtn > 0) then tmp, hostname = string.split(str[1], "=") end else hostname = HOSTNAME rt.sleep(5) end while true do count = 1 while hostname do req_t.url = string.format("%s?hostname=%s", SERVER_URL, hostname) -- HTTPリクエストを実行 rt.sleep(2) res_t = rt.httprequest(req_t) logger("アドレス解決サーバーへの通知を実行しました。") -- リクエストに成功 if res_t.rtn1 then -- アップデートの結果をログに出力する if res_t.code == 200 then if string.match(res_t.body, "good") or string.match(res_t.body, "nochg") or string.match(res_t.body, "nohost") then log = string.format("アドレス解決サーバーへの通知に成功しました。(code=%d)", res_t.code) logger(log) -- ループを抜け、SYSLOGの監視を再開する break end end log = string.format("アドレス解決サーバーへの通知に失敗しました。(code=%d)", res_t.code) logger(log) else logger("アドレス解決サーバーから応答がありません。") end -- 再送時間設定 sleep_time = retry_timer(60, count) if (sleep_time > 3600) then sleep_time = 3600 else count = count * 2 end rt.sleep(sleep_time) end -- 定期的に通知する(12-24時間後) sleep_time = math.random(43200, 86400) rtn, str = rt.syslogwatch(PTN, 1, sleep_time) if (rtn > 0) and string.match(str[1], LOG_PTN3) then tmp, hostname = string.split(str[1], "=") elseif (rtn > 0) and string.match(str[1], LOG_PTN2) then rt.sleep(5) end end EOF |
(※) LAN1の接続機器がIPv6を使用せずIPv4通信のみを行う場合、以下は設定しないでください。
・ipv6 prefix 1 dhcp-prefix@lan2::/64
・ipv6 lan1 rtadv send 1 o_flag=on
・ipv6 lan1 dhcp service server
レベル | 出力メッセージ | 意味 |
---|---|---|
INFO | [MAP-E] tunnel N up v4=IPv4アドレス ポート範囲 [...] | MAP-E TUNNEL[N] が接続した(MAPルールから計算したIPv4アドレスとポート範囲の一部が表示されます) |
[MAP-E] tunnel N down | MAP-E TUNNEL[N] が切断した | |
[OCN MAP-E] hostname=ホスト名 | 固定IP契約のホスト名 | |
DEBUG | [OCN MAP-E] Tunnel[N] Invalid response | 受信したMAPルールが不正だった |
[OCN MAP-E] Tunnel[N] Incomplete response | 受信したMAPルールが解析できなかった | |
[OCN MAP-E] Tunnel[N] RULE Server Error (xxx) | MAPルール配信サーバーからエラー(xxx)が返ってきた | |
[OCN MAP-E] File Open ERROR | MAPルールを保存ファイルから取得できなかった |