OpenVPN で VPN トンネル内に IPv6 を通す

とりあえず、Debian GNU/Linux 9 において、OpenVPN の VPN トンネル中で IPv6 を通すメモです。

基本的に「OpenVPN 設定メモ (Debian 7 Wheezy)」の項目が設定できていて (Debian 9 でもおおよそ同じです) 、サーバ側にはグローバル IPv6 が当たっていて、適切なフィルタリングが出来ているものと想定します。

■前提

  • VPN の内側で使用するネットワークは、ユニークローカルアドレス、「fd00:abcd:abcd:abcd::/64」、サーバの VPN 側 IPv6 は「fd00:abcd:abcd:abcd::1」を使うことにする。
  • 上記のメモの内容が Debian GNU/Linux 9 の OpenVPN パッケージで構築済みである。
  • 設定するサーバには IPv6 の接続性がある。

■設定

/etc/openvpn/server.conf に以下を追記します。

server-ipv6 fd00:abcd:abcd:abcd::1/64
push "route-ipv6 fd00:abcd:abcd:abcd::/64"
push "route-ipv6 2000::/3"
push "dhcp-option DNS DNSサーバのIPv6アドレス" # オプション

ip6tables で以下の様なルールを設定します。(設定内容はこのままコピペじゃなくて、実際の環境に合わせて下さい。)

ip6tables -A INPUT -i tun0 -s fd00:abcd:abcd:abcd::/64 -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A OUTPUT -o tun0 -d fd00:abcd:abcd:abcd::/64 -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A FORWARD -i tun0 -o ens3 -s fd00:abcd:abcd:abcd::/64 -d ::/0 -j ACCEPT
ip6tables -A FORWARD -i ens3 -o tun0 -s ::/0 -d fd00:abcd:abcd:abcd::/64 -j ACCEPT -m state --state ESTABLISHED,RELATED
ip6tables -t nat -A POSTROUTING -o ens3 -s fd00:abcd:abcd:abcd::/64 -d ::/0 -j MASQUERADE
ip6tables -A FORWARD -j DROP

上記を設定後、openvpn サーバを再起動させて、iPhone などのクライアントから OpenVPN で接続すると、VPN 側で IPv4 アドレスの他、IPv6 アドレスも付与されます。

■課題

当然ながら、IPv6 アドレスオンリーのサイトにも繋がるはずですが、なぜか一部画像が表示されなかったりという現象を確認しています。mtu の問題なのかなぁ、と思っているのですが、「OpenVPN Connect iOS FAQ」によれば、iOS の OpenVPN クライアントでは fragment パラメータを設定しているサーバには接続できないらしく、どうしたものかと考え中です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です