IPv6しか無いサーバに繋ぐ為にTailscaleでなんとかした話
おはこんばんにちわ
先日IPv6でしかアクセスできないサーバに自宅PCからアクセスする必要があったのですが自宅のネットワークがIPv6未対応で繋がりませんでした
そこで
「TailscaleでIPv6持ってるマシンをexit nodeに指定したら行けるんじゃね?」
って思ってやってみたら出来たので備忘録として残します。
VPSを契約する
私はConohaのVPSをもともと使っていたのでそこに新たに一番安いインスタンスを作成しました。
一時的に使うので割引きっぷ等は使わず1時間1.3円の従量課金でUbuntuを契約しました。
TailscaleをVPSと自宅PCに入れる
私はどちらもLinuxなので以下の手順ですんなり入りました。
sudo tailscale up
で起動すると初回はURLが出てくるのでそこにブラウザからアクセスしてログインすると以降は起動時にVPNに参加した状態を維持出来ます。
VPSのVMにIPv6アドレスを設定
他のVPSはどうなってるかわからのないのですがConohaのVPSでUbuntuを立ち上げるとデフォルトではIPv6のアドレスは割り振られていないので手動で割り振る必要があります。
なのでまずはConohaのVPS管理画面で立ち上げたVPSのネットワーク情報から利用可能なIPv6アドレスを確認します。
この画面の情報を元にVPSの設定ファイルを以下のように書き換えます。
network:
ethernets:
eth0:
addresses:
- 「使いたいIPv6アドレス」/64
dhcp4: true
dhcp6: false
accept-ra: false
optional: true
gateway6: 「ゲートウェイアドレス」
version: 2
そしてコマンドで設定を反映
sudo netplan apply
反映を確認します。
ifconfig eth0
下記のような情報が出てくればOKです。
inet6 「使いたいIPv6アドレス」 prefixlen 64 scopeid 0x0<global>
VPSをExit Nodeとして設定する
この設定をするとネットワークがExit Nodeに指定されたサーバを介して行われるようになるので
IPv6アドレスを持っていないマシンでもExit NodeがIPv6のアドレスを持っていればアクセスできるようになります。
まずはパケットの転送を許可しましょう
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
これでクライアントのパケットを転送することが可能になります。
私はVPSに割り当てられたIPに対する接続を管理画面から全閉じしてTailscaleからしかアクセスしないようにしているのでVPSのFireWallは切っていますがFireWallが有効な場合そちらで弾かれる可能性もあります。
でTailscaleをExit nodeとして起動し直します。
sudo tailscale down
sudo tailscale up --advertise-exit-node
この段階ではExit nodeに名乗りを上げただけなので続いてTailscaleの管理画面にて許可する必要があります。
この画面にログインすると以下のように!マークがついているマシンがあるので
そのマシンの設定からEdit route settings
を選び以下のようにUse as exit node
を有効にしてください
これでVPSがExit Nodeとして機能するようになりました。
自宅PCからExit Node経由で通信するようにする
とりあえず現状IPv6につながるか確認します
$ ping6 -c 5 ipv6.google.com
ping6: connect: ネットワークに届きません
はい、繋がりませんね
ということでExit node経由で通信するようにしてみます。
まず、VPS上で以下のコマンドでExit NodeのIPアドレスを取得します。
$ tailscale ip
XXX.XXX.XXX.XXX
xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
そして自宅PCのTailscaleでXXX.XXX.XXX.XXX
をExit Nodeとして利用するようにTailscaleを再起動します。
sudo tailscale down
sudo tailscale up --exit-node=XXX.XXX.XXX.XXX
これでIPv6でアクセス出来るようになっているはずなので確認します。
$ ping6 -c 5 ipv6.google.com
PING ipv6.google.com(nrt12s45-in-x0e.1e100.net (2404:6800:4004:825::200e)) 56 data bytes
64 bytes from nrt12s45-in-x0e.1e100.net (2404:6800:4004:825::200e): icmp_seq=1 ttl=54 time=11.2 ms
64 bytes from nrt12s45-in-x0e.1e100.net (2404:6800:4004:825::200e): icmp_seq=2 ttl=54 time=11.4 ms
64 bytes from nrt12s45-in-x0e.1e100.net (2404:6800:4004:825::200e): icmp_seq=3 ttl=54 time=11.7 ms
64 bytes from nrt12s45-in-x0e.1e100.net (2404:6800:4004:825::200e): icmp_seq=4 ttl=54 time=11.4 ms
64 bytes from nrt12s45-in-x0e.1e100.net (2404:6800:4004:825::200e): icmp_seq=5 ttl=54 time=12.0 ms
--- ipv6.google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4022ms
rtt min/avg/max/mdev = 11.208/11.535/12.009/0.276 ms
出来た出来た〜
おしまい
P.S
ちなみにスマホにクライアント入れてExit Node経由させれば通信が暗号化出来るのでフリーWifi使う時にも使うようになったので、今は常時起動してるVPSにこの設定入れて使ってます。
Discussion