LoginSignup
0
4

IPv6 + WireGuard でリモートアクセス VPN

Posted at

IPv6 環境で WireGuard を使ってリモートアクセス VPN を実現できたのでまとめる。

やりたいこと

外出先から自宅内のサーバ (NAS) にリモートアクセスしたい。

我が家のネット回線は フレッツ + OCN を契約しており、IPv6 は普通に IPoE でインターネットに出ていきつつ IPv4 は OCN バーチャルコネクト (MAP-E) での IPIP6 トンネル経由という、最近よくありがちな構成となっている。

従来の PPPoE 接続であればグローバル IPv4 アドレスが1個は付くため LAN 内で VPN サーバを動かしてそこにポートフォワーディングをしてやれば簡単にリモートアクセスは実現できたものだったが、今回のように MAP-E を使っている場合はグローバル IP は他の利用者と共有なので利用できるポートが限られている 1 し、類似の IPIP6 技術である DS-Lite に至っては ISP 側で NAT するのでポートフォワーディングはできない。

なんとかしてこの IPoE 環境でリモートアクセスを実現できないものかと頭を悩ませていたが、無理に IPv4 で頑張らずに 普通に IPv6 でやればよいのでは...? と気づいた。2

作った構成

WireGuard が IPv6 に対応してそうな気配があったので、自宅に転がっていた Raspberry Pi に入れて動かしてみることにした。

image.png

ホームゲートウェイの設定

Raspberry Pi の IPv6 アドレスの 51820 ポート宛のパケットが通過できるように穴を開けておく。

サーバ (Raspberry Pi) 設定

WireGuard のインストールやキーペア生成などの説明は割愛。

まず sysctl で IPv6 パケットのフォワードを許可しておく。(sudo sysctl -p で設定を反映させる)

/etc/sysctl.conf
net.ipv6.conf.all.forwarding = 1

設定ファイルはこんな感じ。

wg0.conf
[Interface]
PrivateKey = ********
Address = fd00::1/64
ListenPort = 51820
PostUp = ip6tables -A FORWARD -i %i -s fd00::/64 -j ACCEPT; ip6tables -t nat -A POSTROUTING -s fd00::/64 -o e+ -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -s fd00::/64 -j ACCEPT; ip6tables -t nat -D POSTROUTING -s fd00::/64 -o e+ -j MASQUERADE

[Peer]
PublicKey = ********
AllowedIPs = fd00::2/64

クライアント設定

iPhone に WireGuard アプリを入れて設定した。

wg0.conf
[Interface]
PrivateKey = ********
Address = fd00::2/64

[Peer]
Endpoint = [X:X:X:X:Y:Y:Y:Y]:51820
PublicKey = ********
AllowedIPs = fd00::/64, X:X:X:X::/64
PersistentKeepalive = 25

動作確認

クライアント (iPhone) で WireGuard VPN を有効にした状態で Web ブラウザから http://[X:X:X:X:Z:Z:Z:Z]/ (NAS の IPv6 アドレス) にアクセスしたところ、NAS の管理画面が表示できた。めでたしめでたし。

まとめ

  • クライアントから接続する際のエンドポイントを IPv6 アドレスにして、WireGuard のパケットがホームゲートウェイを通過できるように設定した
  • トンネル内アドレスは IPv6 のユニークローカルアドレス fd00::/64 3 にして、ピア毎に ::1 ::2 ... と適当に連番で割り当てているだけ
  • クライアントから LAN 内の別のホストにアクセスするためには NAT する必要があったが、コマンドが ip6tables に変わっているだけで、やっていることは IPv4 のときと同様 4

あれ...? 意外と簡単にできてしまったな???

IPv4 over IPv6 で試行錯誤してたときは全然うまくいかなくて泣きそうだったのに、IPv6 でやったらこんなにすぐできてしまうとは...。

参考

  1. MAP-E で降ってくるグローバル IPv4 アドレスと利用可能ポートは実際はほぼ固定らしいので、IPv4 ポートフォワーディングはできないことはないっぽい

  2. フレッツの IPoE でも IPv6 アドレスは半固定なので変わる可能性はあるらしいということを作ったあとで知った。MAP-E で良かったのでは?

  3. IPv6 のユニークローカルアドレス (ULA) は IPv6 のプライベートアドレス的なやつ (という認識)

  4. IPv6 だし NAT しなくても動くかな? と思って試してみたが動かなかった。NAT 無しでフォワードしてもパケットは到達できるが、帰りがデフォルトゲートウェイに行ってしまって Raspberry Pi まで届かないっぽい?

0
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4