【IPv4 over IPv6】VyOS でのDS-Lite (transix)の設定方法【IPIP6】
この記事で実現できること
VyOSでDS-Lite(IPv4 over IPv6)方式によるIPv4網への接続。
※各クライアントに直接IPv6アドレスをアサインしてのIPv6網への接続は今回対象としない。
環境
- vyos 1.3.2 LTS
- 2023年3月現在 Rolling Releaseで提供されている1.4系でも同手順で可能のはず。
- 1.2以前だと一部コマンドが異なる。
- eth0
- LAN側
- eth1
- WAN側
IPv6設定
NTTのNGN網からDHCPv6でIPv6アドレスを取得する。
(IPv6アドレスの取得は10分くらいかかったりするので気長に待つ。)
- VyOS 1.2, 1.3, 1.4共通
configure
set interfaces ethernet eth1 address 'dhcpv6'
set interfaces ethernet eth1 dhcpv6-options parameters-only
set interfaces ethernet eth1 ipv6 address autoconf
set interfaces ethernet eth1 ipv6 disable-forwarding
commit
save
IPv6アドレスが取得できると下記のようになる。
DHCPv6で取得できたIPv6アドレスは後述のIPIP6トンネル設定時に使用するのでメモしておく。
- VyOS 1.2, 1.3, 1.4共通
# run sh int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth0 192.168.xx.xx/24 u/u
eth1 2409:xx:xx:xx:xx:xx:xx:842b/64 u/u
lo 127.0.0.1/8 u/u
::1/128
IPv4 over IPv6(IPIP6)設定
DHCPv6でIPv6アドレスが取得できたら、トンネルインターフェイスを作成する。
remote
はプロバイダ指定の接続先情報を調べて指定する。
もしtransixの場合、下記コマンド結果のIPv6アドレスから1つ選べばOK(2023年3月時点)。
dig @2404:1a8:7f01:b::3 gw.transix.jp aaaa +short
source-address
は上記で取得したDHCPアドレスを指定する。
- VyOS 1.3以降
set interfaces tunnel tun0 encapsulation 'ipip6'
set interfaces tunnel tun0 multicast 'disable'
set interfaces tunnel tun0 remote '2404:8e00::feed:100'
set interfaces tunnel tun0 source-address '2409:xx:xx:xx:xx:xx:xx:842b'
commit
save
- VyOS 1.2以前
set interfaces tunnel tun0 encapsulation 'ipip6'
set interfaces tunnel tun0 multicast 'disable'
set interfaces tunnel tun0 remote-ip '2404:8e00::feed:100'
set interfaces tunnel tun0 local-ip '2409:xx:xx:xx:xx:xx:xx:842b'
commit
save
デフォルトゲートウェイ設定
トンネルインターフェースが作成できたらデフォルトゲートウェイに指定して完了。
設定が上手くいっていたらこの時点でIPv4インターネット接続が可能になっているはず。
- VyOS 1.2, 1.3, 1.4共通
set protocols static interface-route 0.0.0.0/0 next-hop-interface tun0
commit
save
(番外編)トンネルインターフェースのIP設定スクリプトの配置
DHCPv6で取得したIPv6アドレスをコンフィグに埋め込んだがDHCPなので固定IPではない。
OS起動したままであれば途中で変更されることはないがOS再起動などで変更されることもある。
IPが変更された場合はsource-address
を書き換えないとトンネルが正常に張れなくなる。
かといってIP変更が入った時に手動でコンフィグを修正するのは面倒。
↓
postconfig bootup機能でOS起動時にスクリプト実行して自動で書き換えてしまえばいい。
下記コマンドはVyOS上のOperational Mode
ターミナルにコピペするだけで動作するようにしてあるのでよくわからなければ、そのままコピペでも可。
スクリプト配置
/config/scripts/
配下がVyOSのスクリプト置き場なので、そこに配置する。
スクリプト内容は長くないので読めばすぐ分かると思う。
ただ、ネットワークエンジニアだとスクリプトに疎いかもしれないので一応概要を説明すると、
- DHCPv6で入手した現在のIPv6アドレスの値を取得
- コンフィグ内のIPv6アドレスと比較
- 異なっていたら書き換えてconfig保存
というような仕組み。
なお、DHCPv6のアドレス取得に時間のかかる場合があるので、IP取得に失敗した時は10秒ほど待機して再実行するを60回(10*60の約10分間)繰り返すようにしてある。
- VyOS 1.3以降
sudo cat <<'EOL' >/config/scripts/watch_tun_source-address.script
#!/bin/vbash
if [ "$(id -g -n)" != 'vyattacfg' ] ; then
exec sg vyattacfg -c "/bin/vbash $(readlink -f $0) $*"
fi
ETH=$1
TUN=$2
source /opt/vyatta/etc/functions/script-template
for i in {60..1}
do
CURR_IP=$(ip -o -f inet6 addr show dev ${ETH} scope global | awk -F'[ /]*' '{print $4}')
if [ "${CURR_IP}" != "" ]; then
CONF_IP=$(run show configuration commands | grep "${TUN} source-address" | awk '{print $6}' | tr -d "'")
if [ "${CURR_IP}" != "${CONF_IP}" ]; then
set interfaces tunnel ${TUN} source-address ${CURR_IP}
commit
save
fi
break
else
sleep 10
fi
done
EOL
sudo chmod +x /config/scripts/watch_tun_source-address.script
- VyOS 1.2以前
sudo cat <<'EOL' >/config/scripts/watch_tun_source-address.script
#!/bin/vbash
if [ "$(id -g -n)" != 'vyattacfg' ] ; then
exec sg vyattacfg -c "/bin/vbash $(readlink -f $0) $*"
fi
ETH=$1
TUN=$2
source /opt/vyatta/etc/functions/script-template
for i in {60..1}
do
CURR_IP=$(ip -o -f inet6 addr show dev ${ETH} scope global | awk -F'[ /]*' '{print $4}')
if [ "${CURR_IP}" != "" ]; then
CONF_IP=$(run show configuration commands | grep "${TUN} local-ip" | awk '{print $6}' | tr -d "'")
if [ "${CURR_IP}" != "${CONF_IP}" ]; then
set interfaces tunnel ${TUN} local-ip ${CURR_IP}
commit
save
fi
break
else
sleep 10
fi
done
EOL
sudo chmod +x /config/scripts/watch_tun_source-address.script
OS起動時スクリプトに登録
VyOSは/config/scripts/vyos-postconfig-bootup.script
ファイルに指定されたスクリプトをOS起動時に実行してくれる仕様になっている。
※インターフェイス名eth1 tun0
を指定する必要があるので環境に合わせて適宜変更すること。
- VyOS 1.2, 1.3, 1.4共通
sudo bash -c 'echo "/config/scripts/watch_tun_source-address.script eth1 tun0" >> /config/scripts/vyos-postconfig-bootup.script'
完了
テストしたい場合、Configure Mode
に入ってsource-address
を適当なアドレスに書き換えてsave
した後、OS再起動してみてコンフィグが正しいIPに書き換えられていたら成功。
余談
VyOS 1.3以降では、Tunnel設定にsource-address
以外にsource-interface
という設定が増えており、DHCPでIP変動する場合もsource-interface
で指定しておけばよさそうに見える。
しかし、これは罠でsource-interface
指定だとlocal側のIPが空になり正しく動作しなかった。
これがバグなのか意図した仕様なのかは不明だが、VyOS1.2以前から使用していた本スクリプトの実績があるので当面はこちらでよいかなという感想。
Discussion