$Date: 2026/01/06 20:09:22 $
NTTドコモビジネス株式会社が提供する OCNバーチャルコネクト を利用してインターネット接続をする機能を提供します。
※ OCNバーチャルコネクトは、NTTドコモビジネス株式会社(旧 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契約 | |
| RTX840 | すべてのリビジョン | すべてのリビジョン |
| 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 以降 |
NWR100 の対応ファームウェアは以下を参照ください。
OCNバーチャルコネクトのサービス利用下における VPN接続は、以下の機種およびファームウェアで動作可能です。
| 機種 | ファームウェア | ||||||
|---|---|---|---|---|---|---|---|
| 動的IP契約 | 固定IP1契約 | 固定IP8/16契約 | |||||
| IPsec (イニシエーター) |
IPsec | L2TP/IPsec | L2TPv3/IPsec L2TPv3 |
IPsec | L2TP/IPsec | L2TPv3/IPsec L2TPv3 | |
| RTX840 | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン | すべてのリビジョン |
| 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ルールを保存ファイルから取得できなかった |