この記事は琉大情報工学科(知能情報コース) Advent Calendar 2018の18日目の記事です。
はじめに
事の発端は5月の中旬...
ISP(So-net)のIPv6接続先が変わったことにより、今まで受けていたIPv6の恩恵を受けることが出来なくなりました。1
IPv6アドレスは降ってきてるものの接続が出来ないので、IPv4でネットにアクセスしている模様でした。
そのため、回線速度がひどい時に数百Kbpsまで落ち込むことがありました。
光電話を使っていない自分が再びIPv6の恩恵を受けるには月額400円ほど払って機器をレンタルをしなければいけないようでした。
調べてみるとそれまで使っていたDual-Stack Lite方式(DS-Lite、RFC6333)をlinuxのトンネル機能を使って疑似的に再現している人がいたので試してみました。
さくらのVPS で IPv4 over IPv6ルータの構築
必要なもの
- IPv4とIPv6のグローバルアドレスを持ったlinuxサーバ
- IPv6アドレスが降ってくる回線
- Yamaha製ルータ
linuxサーバのOSは参考スライドではCentOSを使っていましたが、ubuntu(16.04 LTS)でも出来たので、お好みのモノでいいかなと思います。
(恐らくiptablesが使えるディストリビューションなら大丈夫だと思います)
ルータは参考スライドではYamaha製のRTX1200を使っていましたが、自分は自宅で使っているYamaha製のRTX810を使用しました。
(cisco製ルータとlinuxをルータにしている場合は試してないので出来るかどうかはわかりません。)
実際に設定
linuxサーバにトンネルを設定
まず最初にmodprobe ip6_tunnel
でIPv6においてのトンネル機能を有効にする。
以下のコマンドを実行してトンネルを設定。
ip -6 tunnel add tun0 mode ip4ip6 remote [ルータのIPv6アドレス] local [サーバのIPv6アドレス]
コマンド中の[ルータのIPv6アドレス]と[サーバのIPv6アドレス]は実際の値に置き換えてください。
以下のコマンドを実行して設定したトンネルを有効にする。
ip link set tun0 up
ip addr add 192.0.0.1/30 dev tun0
以下のコマンドを実行して、フォワーディングに必要なカーネルパラメータを変更。
sysctl -w net.ipv4.conf.all.forwarding=1
sysctl -w net.ipv4.conf.ens3.rp_filter=0
sysctl -w net.ipv4.conf.tun0.rp_filter=0
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.default.forwarding=1
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.nf_conntrack_max=65635
ens3は実際のNICのデバイス名に変えてください。
以下のコマンドを実行してiptablesを設定。
iptables -t nat -F
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i tan0 -j ACCEPT
以下のコマンドを実行して、ルーティングの設定をする。
route add -net 10.0.0.0/8 dev tun0
route add -net 192.168.0.0/16 dev tun0
route add -net 172.16.0.0/12 dev tun0
ルータの設定
Yamahaルータにtelnetやsshでアクセスして、administrator
コマンドで管理者モードになる。
IPv6の設定をした後、tunnel select
コマンドで設定したいトンネルを選択し、以下のコマンドを実行する。
tunnel encapsulation ipip
tunnel endpoint address [linuxサーバのIPv6アドレス]
ip tunnel address 192.0.0.2
ip tunnel remote address 192.0.0.1
ip tunnel tcp mss limit auto
ip tunnel address 192.0.0.2
を実行するとlinuxサーバーから自宅内にアクセスすることが出来る。
ip route default gateway [設定をしたトンネル]
を実行して、デフォルトゲートウェイを設定をしたトンネルにする。
変更の確認
tracebackしてみたり、IPアドレスが確認出来るサイトにアクセスしてIPv4アドレスがlinuxサーバのIPv4アドレスに変わっていること確認する。
設定してみて
数百Kbpsしか出ていなかった時間帯に安定して2〜3Mbps程度の速度が出るようになりました。
機器レンタル代に月額400円払うなら、ほぼ同じ額のVPSにお金を使った方がいいのではと個人的には思いました。(色々できますし)
ubuntu 18.04LTSで上手く出来なかったので、時間を見つけて挑戦してみようかなと思っています。
予期しなかったメリットとデメリットが見つかったので、書いておこうと思います。
- 予期しなかったメリット
- radikoの位置判定が東京になった。(文化放送の声優ラジオ好きなので、文化放送が聞ける様になるだけで感無量)
- 予期しなかったデメリット
- 一部サイトに弾かれる(ビッ○カメラやarch○inuxなど)
最後に
明日(というか今日)の担当は@akio_rさんです!!
AWSのEC2でも同じ環境を構築しようと挑戦しているのですが、上手くいかないので誰か助けて...(安く済ませたい...)