今回は YAMAHA RTX830 で DS-Lite と PPPoE を併用しながら IKEv2 のリモートアクセス VPN を使えるようにする設定を紹介する。
リモートアクセス VPN を利用するためにはインターネット側を起点にした通信が必要になる。
しかし、DS-Lite の IPv4 通信は CGN が間に挟まっているので VPN のエンドポイントとして利用できない。
そこで、ISP の PPPoE で得られる動的な IPv4 アドレスを代わりに VPN のエンドポイントにする。
通常の IPv4 トラフィックは DS-Lite に流しながら、VPN のトラフィックだけをポリシーベースルーティングで PPPoE に向ける。
なお、動作に必要な最低限のコマンドだけを記述している。
実際に稼働させる場合には、セキュリティの観点からフィルタ (IPv4 / IPv6) を追加で設定するのが望ましい。
具体的な設定については、公式ドキュメントの設定例を参照のこと。
基本的には、以下の方針で設定することになるはず。
- インターネットから LAN への通信を原則として遮断する静的フィルタ
- LAN からインターネットへの通信を原則として通過させる動的フィルタ
また、インターフェイス的には LAN2 がインターネット側、LAN1 が自宅の LAN 側になる。
LAN のプライベート IP アドレスには 172.16.0.0/16
のサブネットを想定している。
ひかり電話の契約はないため IPv6 のアドレスはルータ広告で得られるプレフィックスから生成する。
使った環境は次のとおり。
RTX830 BootROM Ver. 1.01
RTX830 FlashROM Table Ver. 1.02
RTX830 Rev.15.02.30 (Wed Aug 9 16:15:25 2023)
もくじ
LAN2
まずはインターネット側に対応するインターフェイス LAN2 の設定から。
基本的には IPv6 でルータ広告とステートレス DHCPv6 を受け取る設定を入れる。
ngn type lan2 ntt
ipv6 prefix 1 ra-prefix@lan2::/64
ipv6 lan2 dhcp service client ir=on
LAN1
続いて LAN 側に対応するインターフェイス LAN1 を設定する。
IPv4 に関してはプライベートアドレスを静的に付与してプロキシ ARP を有効にする。
ip lan1 address 172.16.0.1/16
ip lan1 proxyarp on
IPv6 に関してはルータ広告のプレフィックスを元にアドレスを付与する。
また、LAN 側にいる端末が IPv6 で通信できるようにルータ広告と DHCPv6 サーバを有効にする
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
PPPoE
続いては ISP の PPPoE を設定する。
いわゆる、一般的に NTT のフレッツを利用する際に使用する設定になる。
コマンドの pp
は Peer-to-Peer の略で接続先情報を表すらしい。
<id>
や <password>
は ISP から提供された接続アカウントの内容に置換する。
pp select 1
pp always-on on
pppoe use lan2
pppoe auto disconnect off
pp auth accept chap
pp auth myname <id> <password>
ppp ipcp ipaddress on
ppp ipcp msext on
ppp ccp type none
ip pp nat descriptor 1
netvolante-dns use pp server=<num> auto
netvolante-dns hostname host pp server=<num> <hostname>.<sub-domain>.netvolante.jp
pp enable 1
上記で、PPPoE の IPCP で得られる動的 IP アドレスをネットボランチ DNS サービスに登録している点がポイントになる。
これによって VPN のエンドポイントが FQDN で解決できるようになる。
初回の設定をするときは pp select 1
した状態で、次のように <hostname>
の部分だけを指定する。
この部分は、ドメイン名に沿った形でユーザが使いたいものを任意に指定する。
netvolante-dns use pp auto
netvolante-dns hostname host pp <hostname>
その上で、以下のコマンドを使って現在の IPv4 アドレスをネットボランチ DNS サービスに登録する。
netvolante-dns go pp 1
すると、設定が以下のような形に置き換わるはず。
netvolante-dns use pp server=<num> auto
netvolante-dns hostname host pp server=<num> <hostname>.<sub-domain>.netvolante.jp
置き換わったら設定を保存していく。
save
NAT
次に NAT (NAPT) を設定していく。
まずは PPPoE で Source NAT が使えるようにする。
先ほど設定した pp 1
では NAT のデスクリプタとして 1 番を指定していた。
nat descriptor type 1 masquerade
次に IPsec 関連のトラフィックを LAN1 に付与した IPv4 アドレスに Destination NAT する。
つまり、実際に VPN のエンドポイントになるのは LAN1 に付与された IPv4 アドレスということになる。
nat descriptor masquerade static 1 1 172.16.0.1 esp
nat descriptor masquerade static 1 2 172.16.0.1 udp 500
nat descriptor masquerade static 1 3 172.16.0.1 udp 4500
DS-Lite
次に DS-Lite を設定する。
といっても、単なる IP-IP トンネルに過ぎない。
tunnel select 1
tunnel encapsulation ipip
tunnel endpoint name gw.transix.jp fqdn
tunnel enable 1
ルーティング
続いて IPv4 のルーティングを設定する。
次のような方針で設定する。
- メインの経路に DS-Lite のトンネルを利用する
- バックアップの経路に PPPoE を利用する
- IPsec 関連のトラフィックはポリシーベースルーティングで PPPoE に向ける
なお、YAMAHA のルータではポリシーベースルーティングをフィルタ型ルーティングと呼んでいる。
上記を反映したコマンドが次のとおり。
hide
は接続が有効なときだけ経路として利用することを示す。
また weight
はどれくらいの割合でトラフィックを流すかを指定する。
filter
は、フィルタに合致したトラフィックだけをそのゲートウェイに流すことを意味する。
ip route default gateway tunnel 1 hide gateway pp 1 weight 0 gateway pp 1 filter 44051 44052 44053
つまり、DS-Lite が使える時はトラフィックをそちらに全て流し、使えない時は全て PPPoE に流す。
ただしフィルタに合致するトラフィックだけは常に PPPoE に流す、という意味になる。
コマンドの区切りを改行して分かりやすくしてみると次のようになる。
なお、あくまで例示のために改行しているだけで、この状態では有効なコマンドにならない。
ip route default
gateway tunnel 1 hide
gateway pp 1 weight 0
gateway pp 1 filter 44051 44052 44053
上記で設定されているフィルタ型ルーティングに対応するフィルタは次のとおり。
LAN1 に付与した IPv4 アドレスが送信元になっている IPsec 関連のパケットがフィルタに合致する。
なお、フィルタ番号については任意の整数なので、取り違えにくいようなルールで自由に指定して構わない。
ip filter 44051 pass 172.16.0.1 * esp
ip filter 44052 pass 172.16.0.1 * udp 500 *
ip filter 44053 pass 172.16.0.1 * udp 4500 *
なお、IPv6 のルーティングに関してはルータ広告を元にデフォルトルートが自動で設定されるようだ。
DHCP サーバ
次に DHCP (DHCPv4) サーバを設定する。
といっても、サービスを有効にして払い出すアドレスレンジを指定するくらい。
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 172.16.1.1-172.16.1.254/16
DNS サーバ
DNS サーバに関してはプロキシのサービスを有効にする。
フルサービスリゾルバのアドレスは LAN2 から DHCPv6 で取得する。
PPPoE から取得する場合は dns server pp 1
を入れても良いけど、両方入っている場合は常に PPPoE が優先されるらしい。
dns host lan1
dns server dhcp lan2
IKEv2
そして IKEv2 のリモートアクセス VPN を設定する。
ipsec ike local name
にはネットボランチ DNS サービスの FQDN を使っている。
ただ、もしかすると FQDN として解釈できる任意の文字列で良いかもしれない。
ipsec ike remote name
には FQDN として解釈できる任意の文字列を入れる。
クライアント側で VPN の設定を作る際は local
と remote
が入れ替わる点に注意する。
<psk>
は IPsec の事前共有鍵なので、複雑で十分に長い文字列を指定する。
tunnel select 10
tunnel encapsulation ipsec
ipsec tunnel 1
ipsec sa policy 1 1 esp
ipsec ike version 1 2
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 on rfc4306 10 3
ipsec ike local name 1 <domain>.<sub-domain>.netvolante.jp fqdn
ipsec ike pre-shared-key 1 text <psk>
ipsec ike remote name 1 <remote> fqdn
ipsec ike mode-cfg address 1 1
ipsec auto refresh 1 off
tunnel enable 10
また、上記の設定で指定されている IKEv2 リモートアクセス VPN で配布するアドレスプールを定義する。
ipsec ike mode-cfg address pool 1 172.16.2.1-172.16.2.254/16
以上で RTX830 で DS-Lite と PPPoE を併用しながら IKEv2 のリモートアクセス VPN が使えるようになるはず。
クライアント側を設定する
あとはクライアント側に IKEv2 リモートアクセス VPN の設定をするだけ。
主な設定項目は前述のコンフィグから抜き出すと次のようになる。
- エンドポイント
<domain>.<sub-domain>.netvolante.jp
- リモート ID
<domain>.<sub-domain>.netvolante.jp
- ローカル ID
- ユーザ認証
- 事前共有鍵
つながらないときは syslog debug on
にしたり、コンフィグを確認したり、パケットキャプチャしながら切り分けていく。
いじょう。
参考
www.rtpro.yamaha.co.jp
www.rtpro.yamaha.co.jp
www.rtpro.yamaha.co.jp