コロナ対策でリモートワークの機会が増えて、それまで使っていたWiMAXの回線の遅延にイライラがつのりにつのり、IIJmioひかりのFTTH回線にしました。(フレッツ・光ネクスト ファミリー・スーパーハイスピードタイプ 隼相当)
そしていつかはFTTHにしようと思って買っていたYAMAHAのRTX830が日の目を見る日がやってきました。
今朝、寝惚け眼でRTX830他+αをポチってしまった…。 https://t.co/khA4kxSMuw
— とどたん(todotantan) (@todotantan) November 2, 2017
今回のネットワーク構成はこんな感じです。絵心は全くありません。
IIJmioの回線はIPoEオプションを申し込んでいます。自宅からのインタネットアクセスは次のようになります。
- IPv4:DS-Lite(IPv4 over IPv6)でインターネットマルチフィールドのtransixサービスを経由してインターネットに
- IPv6:NGNのゲートウェイルーター経由してインターネットに
図で示すとこうなります。
IPv4でもフレッツの網終端装置の混雑を避けて通信できる今時の構成です。
PPPoEの接続は外出先からのリモートアクセスアクセス用(L2TP/IPsec)に使用しています。
RTX830でフィルタ型のルーティングを利用して、リモートアクセスのL2TP/IPsecだけをPPPoEでのIPv4を経由するようにしています。configの抜粋は以下のとおり。
# フィルタ型ルーティングの定義
# tunnel 1はDS-LiteのIPIPトンネル pp 1がPPPoE接続
ip route default gateway tunnel 1 gateway pp 1 filter 400000 400001 400002 400003
# PPPoE側に向けたいL2TP/IPsecで使用するプロトコルのフィルタを定義
ip filter 400000 pass * * udp 500 *
ip filter 400001 pass * * esp
ip filter 400002 pass * * udp 4500 *
ip filter 400003 pass * * udp 1701 *
(L2TP/IPsecのリモートアクセスの設定はRTX830のWeb画面からでもできるので割愛)
ここまではよくある構成でググったらよく出てくると思います。今回、設定を試みたのは、自宅のネットワークとさくらVPSで借りてる、このサーバ(CentOS 6.10)をVPNを利用してセキュアにつなぐことです。
幸い(?)、IIJmioひかりでIPoEを申し込んでおり、RTX830にはIPv6のアドレスが半固定で割り当てられています(図中ではXXXX:XXXX::1と表記)。また、さくらVPSは元よりIPv6のアドレスを持っています(同じくZZZZ:ZZZZ::1と表記)。
そこで思いついたのが、CentOSにlibreswanを入れてIPsecでの通信を可能にして、RTX830とIPv4 over IPv6 IPsecができないだろうか?と。
こんな感じに。
わざわざ、IPv4 over IPv6 IPsecにしたのは・・・
v4でvpn張っているのは、プライベートipでの利用しかしない予定だからです。v6上でトンネル掘ったのはpppoeのv4はリモートアクセスに使うので、NAT関係の設定が面倒だったのと、混雑時に回線スピードが落ちるのを回避したかったからです。
が、他でやってなさそうなので試してみたってのが一番。— とどたん(todotantan) (@todotantan) July 10, 2020
「他でやってなさそうなので試してみたかった」
RTX830のIPsecの機能を確認すると、
IPv6対応
IPv6とIPsecの両方の機能を持つファームウェアでは、 IPv6のIPsecを使用することができます。すなわち、IPv6で動作するIKEと、 IPv6の2つの拡張ヘッダ(AH、ESP)に対応します。 コマンドや動作は、基本的にIPv4のIPsecに準じ、 大きな違いはありません。
— IPsec機能の仕様
とありできそうな感じです。
あと、rtproの「IPsec 相互接続の手引き」も参考にしました。
で、以下は試行錯誤の結果のまとめです。
CentOSへのlibreswanのインストール・設定手順は次の通りです。
- VPSを一旦停止して、プライベートアドレスを割り当てるNIC(eth1)をHUBにつなぐ。を、物理的に行ったかのように操作(日本語がオカシイ)
- 具体的には、まずVPSのコントロールパネルでスイッチ作成
作成したスイッチにVPSのNICをつなぐ。
- VPSをブートして、IPアドレスとルーティングを設定
/etc/sysconfig/network-scripts/ifcfg-eth1DEVICE="eth1" IPADDR="192.168.zzz.1" NETMASK="255.255.255.0" ONBOOT="yes" TYPE="Ethernet"
/etc/sysconfig/network-scripts/route-eth1
192.168.xxx.0/23 via 192.168.zzz.1 dev eth1
なお、ルーティング先を、192.168.xxx.0/24とせずに/23としたのは、RTX830のWAN(LAN2)側にも通信できるようにするためです。構成図にあるようRTX830のWAN(LAN2)側のネットワークを192.168.yyy.0/24としており、xxxが偶数かつyyy=xxx+1としています。
RTX830側のネットワークが1セグメントだけで、クラスCなら192.168.xxx.0/24にしてください。 - # service network restart でネットワークを再起動
- # yum install libreswan でインストール
- # service ipsec start でIPsecのサービスを起動
- # ipsec verify でエラーチェック
今回は表示されたエラーをもとに /etc/sysctl.conf の内容を以下の通り書き換えnet.ipv4.ip_forward = 0 → 1 に変更
以下の記述を追加
#ソースルーティングの無効化 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.eth1.accept_redirects = 0 net.ipv4.conf.eth2.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 net.ipv4.conf.eth2.send_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 #逆方向パス転送 net.ipv4.conf.default.rp_filter =0 net.ipv4.conf.eth0.rp_filter =0 net.ipv4.conf.eth1.rp_filter =0 net.ipv4.conf.eth2.rp_filter =0 net.ipv4.conf.lo.rp_filter =0
なお、IPv6関係は特に変更していません。(その後、iptables,ip6tablesの設定は見直しました)
- IPsecの設定ファイルを作成
/etc/ipsec.d/vps-rtx830.confconn vps-rtx830 # ↑ # 設定名の定義は字下げしない # 設定内容のセクションは、行頭スペースで字下げすること(重要) # ↓ auto=start type=tunnel aggrmode=no authby=secret keyexchange=ike ike=aes128-sha1;modp1024 phase2=esp phase2alg=aes128-sha1;modp1024 pfs=no ikelifetime=28800s keylife=28800s compress=no # keepaliveはDPDを使用 dpddelay=5 dpdtimeout=20 dpdaction=restart # vps left=ZZZZ:ZZZZ::1 leftsubnet=192.168.zzz.0/24 # rtx830 right=XXXX:XXXX::1 rightsubnet=192.168.xxx.0/23 #/23としたのは(略)
/etc/ipsec.d/vps-rtx830.secrets
ZZZZ:ZZZZ::1 XXXX:XXXX::1 : PSK "<事前共有鍵>"
- # chkconfig ipsec on で次回VPS起動時からIPsecサービスが自動起動するようにする。
HGWのPR-500KIにVPSからの通信を許可する設定を入れます。
その他、HGWは192.168.yyy.2にアドレス変更、DHCPサーバ停止、192.168.xxx.0/24と192.168.zzz.0/24のルーティングを設定しています。
RTX830側の設定は以下の通り(config抜粋)
# HGW PR-500KIの管理画面へのアクセスと、HGWのSIPサーバに # 接続するためにWAN(LAN2)にIPv4アドレスを設定。 # yyy=xxx+1 かつ、xxxは偶数 ip lan1 address 192.168.xxx.1/24 ip lan2 address 192.168.yyy.1/24 # VPS側からはLAN1・LAN2の2つまとめて 192.168.xxx.0/23 に見える # VPS側のネットワークへのルーティング設定 # tunnel 1はDS-Liteで使用済みのためtunnel 2とする ip route 192.168.zzz.0/24 gateway tunnel 2 # VPSのIPv6アドレスからの通信を許可(赤字部分) ipv6 lan2 secure filter in 101000 101001 101002 102000 ipv6 lan2 secure filter out 101099 dynamic 101080 101081 101082 101083 101084 101085 101098 101099 ipv6 filter 102000 pass ZZZZ:ZZZZ::1 * * * * # トンネル設定 tunnel select 2 description tunnel VPS-RTX830 ipsec tunnel 1 ipsec sa policy 1 1 esp aes-cbc sha-hmac ipsec ike encryption 1 aes-cbc ipsec ike group 1 modp1024 ipsec ike hash 1 sha ipsec ike keepalive log 1 off ipsec ike keepalive use 1 on dpd # keepaliveはDPDを使用 ipsec ike local address 1 XXXX:XXXX::1 ipsec ike pre-shared-key 1 text <事前共有鍵> ipsec ike remote address 1 ZZZZ:ZZZZ::1 ip tunnel tcp mss limit auto tunnel enable 2 ipsec auto refresh on
でVPNがつながった状態がこれです。
接続先は上から
- iijmio IPv6 IPoE
- iijmio IPv4 PPPoE
- さくらVPS⇔RTX830 IPv4 over IPv6 IPsec
- iijmio DS-Lite
- リモートアクセス L2TP/IPsec(IPv4) 2端末
です。
昨晩でほぼほぼ煮詰まったネットワーク設定でのRTX830のダッシュボードの状態。#rtx830 #yamaha#iijmio #iijmioひかり #ipoe#さくらインターネット #さくらVPS pic.twitter.com/qjXVQ8ToJn
— とどたん(todotantan) (@todotantan) July 9, 2020
一連のツイートはYAMAHA公式さん(@yamaha_sn)にまとめてもらいました。光栄です。
「「とどたん ( @todotantan )」さんのテレワーク拡大による在宅環境の整備経過( #RTX830 の本領発揮!? )」をトゥギャりました。 https://t.co/dMC9pMmAG6
— Yamaha Comm.Div. 「きっと忘れない。人生初の努力だから。」「ネツエン」「働く音改革」 (@yamaha_sn) July 10, 2020
ちなみに、IPv4 over IPv6 IPsecがどれくらいのスペックでつながったですが、自宅(大阪府内)⇔さくらVPS(大阪)が、
- Ping値 4~5ms
- 上り下りとも~90Mbps(さくらVPSの帯域上限は100Mbps)
となりました。Ping値はIPv6で直接でもVPNでも差はありません。