2019-08-12

WireGuard の IPv6 化

https://bike8615.blogspot.com/2019/04/vpn-wireguard_8.html

上記サイトの記事で WireGuard の導入に関して記載しました。

この記事では IPv4 での VPN でしたが、今回 IPv6 対応し IPv6 サイトへのアクセスをおこなえるようにしました。



IPv6 でしかアクセスできないサイトもアクセスできるようになり、Mac のみならず iPhone や Android 機でも同様にできるようになります。


また、IPv6 アクセスは少し速くアクセスできるようですから何か得した気分です。



WireGuard は「クライアント to サーバー型」ではなく 「ピア to ピア型」なので厳密には「サーバー」ではないのですが、便宜的に Raspberry Pi の方を「サーバー側」とし、端末を「クライアント側」とします。


さて、「サーバー側」の定義ファイルである wg0.conf の内容にピンク文字列部分を追加します。

[Interface]
Address = 10.0.0.1/32, fd86:ea04:1119::1 
→ VPN のサーバー側の仮想アドレス
ListenPort = 1194 → 例では OpenVPN と同じ 1194 を使う設定にした
PrivateKey = [server_private.key] → サーバー用プライベートキーをペーストする

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
#Client1
PublicKey =
[client1_public.key] → クライアント用パブリックキーをペーストする
AllowedIPs = 10.0.0.2/32, fd86:ea04:1119::2



IPv6 アドレスはプライベートアドレスを設定しますが "fd86:……" のように fd または fe で始まるアドレスにします。




「クライアント側」もこれに合わせて次の2箇所に追記します。

Interface → Addreses 欄に 10.0.0.2/32, fd86:ea04:1119::2/128 
Peer → Allowed IPs 欄に 0.0.0.0/0, ::/0

とします。



以上の設定で、「サーバー側」アドレスは IPv4 = 10.0.0.1 / IPv6 = fd86:ea04:1119::1 となります。

また、「クライアント側」アドレスは IPv4 = 10.0.0.2 / IPv6 = fd86:ea04:1119::2 となります。




以上の設定をしたら、「サーバー側」は WireGuard の「停止 → 起動」をします。

pi@raspberrypi:~ $ sudo wg-quick down wg0
pi@raspberrypi:~ $ sudo wg-quick up wg0


「クライアント側」はアプリの「切断 → 接続」をします。


pi@raspberrypi:~ $ sudo wg


で接続状態を確認します。

お互いに ping を投げて接続を確認します。

pi@raspberrypi:~ $ ping6 fd86:ea04:1119::2
PING fd86:ea04:1119::2(fd86:ea04:1119::2) 56 data bytes
64 bytes from fd86:ea04:1119::2: icmp_seq=1 ttl=64 time=86.5 ms
64 bytes from fd86:ea04:1119::2: icmp_seq=2 ttl=64 time=78.1 ms
^C





「クライアント側」も同様にしますが、IPv6 で ping できるアプリを使います。


「Ping & Net(Ulf Dittmer)」というドイツ製アプリあたりがいいでしょう。



さて、Chrome で実際に IPv6 での接続をしてみましょう。


まずは、"ipv6.google.com" にアクセスして下図の画面になれば、接続できています。
IPv6 でアクセスできていないと、応答がタイムアウトします。






































次に、IPv6 への接続性を確認してみます。

"test-ipv6.com" に接続してみて 10/10 の判定ならば大丈夫です。


なお、黄色のビックリマークの部分は以下の2つです。

あなたのブラウザは動作するIPv6アドレスを持っています - しかし利用が回避されています。ワタシたちはこの点を憂慮しています。[詳細]

IPv4またはIPv6のいずれかのトンネルメカニズムを使用しているようです。If you are using a VPN, your VPN is only protecting one protocol, not both.

前者は、Android 版 Chrome が素直に IPv6 に接続せずに IPv4 での接続を試みるからこのメッセージになっていますが、10/10 判定からは間違いなく IPv6 が接続できていることを示しています。

後者は、IPv4 over IPv6 でトンネリングしている場合、IPv6 は VPN 保護されているが、IPv4 は VPN での保護ではなくトンネリングに基づく保護であることを示しています。




































次の画面は、"http://[2001:200:dff:fff1:216:3eff:feb1:44d7]" にアクセスしたときのものです。

IPv6 でアクセスできていれば亀が泳いでいます。






































いかがでしょうか。






これであなたも WireGuard による IPv6 化ができたことになります(もちろん、IPv4 でも大丈夫です)。








0 件のコメント: