10Gbps IPv6(IPoE)でVPNをWin環境に構築したメモ

IPv6環境だとv4と違ってポートは限られていますし何よりVPN機能のあるルーターが少なく面倒です。

今回 WireGuard を使ってVPN環境を自宅に構築したのでその方法を紹介します。

ちなみに Linux 環境下でのインストール紹介記事がかなり多いのですが、WireGuard はマルチプラットフォームなので Windows でもいけます。
※WireGuard はインストールするものにサーバー・クライアントの区別がないようです。

– – – – – –

はじめに・前提

片方Linuxじゃないとだめとかないです。お互いWindowsでも全然可能です。VPNサーバーには市販のIntel NUC等を指定しても構いません。

今回はNTT環境のIPv6ホームゲートウェイ(HGW)を通じて、

NUC – HGW(XG-100NE) – インターネット – スマホなど

……という感じの構成でトライしました。この機器を実際のご自身の環境に置き換えてみてください。
別にNAS等とVPNサーバーを分けてもいいですし、このあたりはいろいろな運用があるでしょう。

あ、ちなみに au 環境その他は知らんです……


IPv6アドレスの確認

まずあなたのアドレスを調べましょう。↓で調べられます。
https://test-ipv6.com/index.html.ja_JP

ちなみにcmd → ipconfig /all のいつものでも調べられますが、
Windowsの場合、保護のため一時IPv6アドレスというものでつながります。
これは再起動すると変わってしまうものです。

というのもv6は設定次第でグローバル(インターネット)から直打ちアクセスもでき、さらに半固定なのでこうなっています。一応、

netsh interface ipv6 set privacy state=disable

で解除できますが、セキュリティ的に全くおすすめしません。

ひとまず再起動しない前提で、調べた一時IPv6で次へ。


DDNS登録

今回外出先から接続するにあたって、v4でもおなじみのDNSを利用します。
v6では通常のv4向けDNSでは運用できないので、界隈では有名な日本のSoftEtherが提供するIPv6のためのDDNSサービスに登録します。無料です。

https://i.open.ad.jp/

ホスト名、↑のVPNサーバーマシンのIPv6アドレス、メールアドレスで登録。特段難しい箇所はないと思います。
今回はホスト名 example で登録したものとします。
この場合、DDNSのアドレス(URL)は example.i.open.ad.jp となります。


HGW, ルーターの設定

ホームゲートウェイ(HGW)兼ルーターがNTTの XG-100NE の場合、以下の設定にします。
ポート番号は任意のものでOKです。
IPv4 over IPv6 だと、v4側はポートに制約があるのですが、今回DDNS経由でアクセスするのでわりとなんでもよさそうです。今回は50001, 10005 とかにしておきます。下の方にリンクしておいたPCWatchのほうだと55222と22555を使ってました。もしポートが何かと被ってるとうまくいかないかも。その場合は55222とかを試してみてください。
※ちなみにお使いの環境の使用可能v4ポートの一覧は http://ntt.setup:8888/t の、「IPv4 設定」から確認できます。

IPv6ファイアウォール機能:有効
IPv6セキュリティのレベル:標準

IPv6 パケットフィルター設定(IPoE)
    フィルタ種別:   許可
    通信方向:         LAN→IPoE
    プロトコル:      プロトコル名指定 UDP
    宛先ポート:      ポート番号指定 50001

さらにルーターでこのポートを開放します。
XG-100NE をそのままルーター兼用で使っている場合は、↑と同じ画面で次の設定を追加します。

IPv6 パケットフィルター設定(IPoE)
    フィルタ種別:   許可
    通信方向:         IPoE → LAN
    プロトコル:      プロトコル名指定 UDP
    宛送信元          クライアントのIPv6アドレス/128
    送信元ポート   10005
    宛先                 サーバーのIPv6アドレス/128
    宛先ポート       50001

参考:
https://internet.watch.impress.co.jp/img/iw/docs/1296/873/html/006_o.png.html

※設定方法はルーターで違うので適当に参照すること

クライアントのIPはたとえばAndroidなら設定→デバイス情報→一番下あたりにv4アドレスと一緒に書いてあります。
当然、接続元が変わればアドレスも変わります。
なので、旅行・出張等で場所や環境が変わりそうなら接続元をフリーで先を固定か、
逆に先が変わりそうなら元を固定で先をフリーか………ここは運用で変えましょう。
※セキュリティ的にDDNSを公開する可能性があるか、自分が有名=攻撃されそうな自覚があれば厳格に運用しましょう

なお XG-100NE なら編集後、リスト左側でチェック入れて設定押さないと有効化されないので注意。


WireGuardのインストール

こちらからインストールします。サーバーとクライアントの区別はありません。

https://www.wireguard.com/install/

Windows 環境ではGUIで設定可能です。インストールすると勝手に立ち上がります。


サーバー側セットアップ その1

それでは設定をしていきます。

なお、そこそこめんどい手順(行ったり来たり)なので、手っ取り早く楽したいなら後半の「めんどくさい!って人向け」のセクションまで作業せず軽く読み漁る程度にしておくのもおすすめです。

インストールすると勝手に立ち上がるので、「空のトンネルを追加」を選択します。
(左下のドロップダウンメニューを展開する。※2023-09-03時点のUI)

その後以下の手順で設定します。

  1. ダイアログが開くので、名前は適当に「VPN_Serv」にでもする。
  2. すぐ下に「public key(公開鍵): 」とあるので、その値を控えておく。
    ※この値を <サーバー公開鍵> と以下呼称する。
  3. 下に [interface] から始まるテキストボックスがあるが、以下のように設定を書き換える。

[Interface]
PrivateKey = <自動入力されているのでそのまま>
Address = 10.0.0.1/24
# 適当に。クライアントからの接続先になる。既存LANとかぶらない値であればOK。/24を指定
ListenPort = 50001
# 任意のポート

※ #から始まるやつはコメントなのでなくてもOKです。


クライアント側セットアップ

次にクライアント側の設定に移ります。先程と同様、空のトンネルを作ります(が、クライアント用なのでサーバー側で使うことはありません)。

基本的にはInterfaceとPeerが逆転し、今度はInterfaceがクライアント側、Peerが接続先であるVPNサーバー(NUC)用の情報を書くこととなります。

[Interface]
PrivateKey = <自動入力そのまま>
Address = 10.0.0.2/24
# サーバー側のアドレスと同じ範囲(x.y.100.1 なら、x.y.100.2, 3, 4 ... とする。/24にする。

[Peer]
Endpoint = example.i.open.ad.jp:50001
# 先程のDDNSで取得したURLと、サーバー側のポートをあわせて記入。
PublicKey = <サーバー公開鍵>
AllowedIPs = 10.0.0.1/32, <任意IP: 192.168.x.x など>
# 任意IP: 自宅LAN内にほかにNASなどつなぎたいものがあればそのアドレス。NASが 192.168.10.5/32 ならそう書く。コンマ区切り。

サーバー公開鍵の部分は先程コピーしたのを使用します。上記設定文字列をコピーする前に、先に貼り付けておくとかしておきましょう。

クライアントが一台ならこれでOKです。複数台を想定している場合は台数分作りましょう。


サーバー側セットアップ その2

Client側のセットアップが終わったら、最後にサーバー側にクライアント側の情報を追記してあげます。

再度サーバー側設定を開いて、最後の行に [Peer] セクションを追加していきます。

Peer ごとに公開鍵 (PublicKey) と AllowedIPs (クライアント側に割り振る予定のIP) を追加していけばOKです。

[Peer]
PublicKey = <Peer・クライアント側公開鍵>
AllowedIPs = 10.0.0.2/32

[Peer]
# Peer 2
# ...

これで設定は完了です。

終わったらZipのマークを押してClient情報をファイルにエクスポートします。Zipで出ますが必要なのはClientの情報だけで、中身は拡張子.confのテキストファイルです。これをクライアントへコピーしておいてください。


めんどくさい!って人向け

実は専用のツールが提供されています。

https://www.wireguardconfig.com/

公開鍵、秘密鍵の設定を全自動で行ってくれるので大変便利です。

ポート、クライアント端末数、AllowedIPs、Endpoint(DDNS)だけ設定すればOKです。
(Post系もデフォで値入ってますがLinux向けにiptable引っ張ってくるやつなのでいらんです)

ただ惜しむらくはオンラインツールゆえに「秘密鍵なのにすでに他人に知られている状況」ということでしょうか。とはいえ大変使いやすいツール(というかデフォでこの機能欲しい)で使わないのはもったいないです。

なのでセキュリティのため、せめてDDNS欄はこのままにしておき、設定をページ下部からDLできるので、その後ローカルでDDNSだけ手動反映というのが一番良さそうな気がします。


クライアントへのインストールと設定のインポート

あとはクライアント側で設定ファイルをインポートします。

AndroidでもWindowsでもインストール・インポートともに難しくないのでここは割愛します。Androidは適当なファイルマネージャーとかクラウドストレージ使いましょう。

インポート後、サーバーとクライアント側でVPN接続を有効化し、RDP等が通ればOKです。

なおファイルサーバーについてはAndroidではSMBのポート445が塞がってます。なのでSMBはテザリングで別途Windows機等からつなぐか、SMBを諦めて別のプロトコルにするなどの工夫が必要かと思います。


じゃじゃ~ん

これで完了です。ちょっとv4と比べるとめんどくさい感ありますが……

ちなみに、生成された Private Key (秘密鍵) は公開NGです。Private Key と Public Keyは一対一で、これで認証を行っています。Private Key から Public Key は仕組み上普通に生成可能です。

もっといえば、個人的にはそのうち Public Key からであってもいけてしまうようになるのでは??と思ってます。
(RSA暗号のうち2048ビット長の解読には1万量子ビットクラスが必要(+さらに安定化などなど)、と富士通の研究で示されているのですが、今だいたい40Qbitくらいを目安にしているのだそうです。そんなに遠くなさそうな気がしませんか?)

そのため当記事では公開鍵であってもぼかしています。

お疲れ様でした。

– – – – – –

1件のコメント

  1. […] 別記事をご覧ください。普通には使えないですね。楽したいならヤマハのルーター買うのもアリかと。 […]

コメントを残す

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