Android12の登場によってL2TPが使い物にならなくなったので、VPNサーバーを構築しました。
フレッツ光ネクスト MAP-E契約、ルーターはRTX830、VPNサーバーにRaspberryPiという環境でwireguard VPNを構築します。
ラズベリーパイに簡単にVPNが使えるPiVPNをインストールして使います。
PIVPNの設定方法と、それぞれの通信方法での詳細なVPN構築方法に分けて書きます。
最初に組みたいネットワークの種類の設定方法を見てからPiVPNの設定を見たほうがスムーズです。
ラズパイのIPアドレスの固定は予め、やっておくといいです。
PiVPNの利用
まずはラズパイにsshなどで接続して次のコマンドを打ちます。
curl -L https://install.pivpn.io | bash
コマンドを打つと青い画面が出てきて操作ができるようになります。
操作方法は矢印とスペースキーで選択、エンターで確定です。
インストール案内 OKで次に進みます。
固定IPが必要とのことです。
次に進みます。
ユーザー名の選択
wireguardを使うか、openvpnを使うかの選択
今回はwireguardにします。
ポート番号の登録
デフォルトは51820ですが変更もできます。
v4 over v6を使う場合は必ず変更しましょう。詳細はv4 over v6の設定方法を見てください。
DNSサーバーを選びます。適当にGoogleにしました。
IPアドレスかDDNSを登録します。
v4、v6の場合はDDNS、v4 over v6の場合はそのままIPアドレスを使います。
詳細はそれぞれのネットワークの設定方法を見てください。
再起動するか聞かれるので再起動します。
これで設定は完了です。
PiVPNコマンド
PiVPNでよく使うコマンドです。
pivpn -a ユーザーの追加 pivpn -c 接続しているユーザーなどの確認 pivpn -qr 設定用QRコードの表示(コマンドの後ろにユーザー名を入力)
手順の例としてはこのようになります。
pivpn -a
ユーザー名入力: test
pivpn -qr test
表示されたQRコードをアプリで読み取る。
wireguardアプリはAppStoreやGooglePlayからインストールしてください。
VPNの追加からQRコードの生成で読み取るだけで設定は完了します。
ssh接続や、ラズパイのGUI表示だとうまくQRコードが表示されないことがあります。
そのときはラズパイ本体からCUIで操作しましょう。
GUIからCUIへの切り替えは startx を打つだけでできます。
IPv4(PPoE)でのVPN
一般的に一番よくつかわれている通信方式ですね。
L2TPを使っていたときはポートの指定ができなかったため、PPoE接続しかできませんでした。
フレッツv6環境であればPPPoEは使わなくてもいいと思いますが、他社回線でv6に対応していなかったり、v4 over v6ポート開放ができない場合はこの方式しか使えません。
今回はフレッツでv6をメインで使っている回線で説明するため、設定がめんどくさくなっています。
DDNSの設定
PPPoEのv4アドレスは頻繁に変わってしまうため、DDNSは必須です。
RTX830を使用しているため、ヤマハネットボランチDNSを利用します。
GUIから簡単設定、ネットボランチDNSで簡単に登録できます。
登録したDDNSはPIVPNの初期設定時のIPアドレス入力時に入力してください。
通信ルートの設定
フレッツでv6を使っている場合は基本的にすべての通信はv6、もしくはv4 over v6を利用しているはずです。
そのため、PIVPNで利用するポートをv4で通信するように設定しなければいけません。
コマンドはCUIでやってもいいですし、GUIから管理-保守-コマンドの実行のところに入力しても使えます。
下記のコマンドを入力して対応させます。
ip filter 100001 pass * * udp 51820 * ip route default gateway tunnel 1 gateway pp 1 filter 100001
ポート番号はwireguardの標準にしてありますので、PIVPN設定時にポートを変えた場合はそれに対応したものに変更してください。
ついでにRTX830のL2TPもv4通信にさせるときは下記のコマンドが使えます。
ip filter 100001 pass * * udp 500 * ip filter 100002 pass * * udp 4500 * ip filter 100003 pass * * udp 1701 * ip filter 100004 pass * * esp * * ip filter 100005 pass * * udp 51820 * ip route default gateway tunnel 1 gateway pp 1 filter 100001 100002 100003 100004 100005
ポート開放
IPv4 over IPv6でのVPN
v4 over v6のv4アドレスは滅多に変わることがなく、v6のルートを使って通信ができるのでとても便利です。
使用できるポートが限られているのが欠点ですが、wireguardは好きなポートを使えるので問題ないです。
ちなみにアドレスは変更されないものという前提で作ったので、もしアドレスが変更された場合は繋がらなくなります。
アドレスが変更されたところを見たことがないので、その対策はしませんでした。
事前確認
事前確認として、v4 over v6でのv4アドレスと使用可能なポートを確認します。
v4のアドレスは適当なIPアドレス確認サイトで確認しましょう。
確認しなくてもラズパイでpivpn起動したときに、v4 over v6で通信することができていれば、デフォルトで入力されているIPアドレスをそのまま使えます。
もし、PPPoEのv4アドレスが表示されたらルーターの設定を見直してください。
使用可能なポートはRTX830に下記コマンドを入力すれば簡単に確認できます。
show nat descriptor address
利用できるポートから好きなものを選んでpivpnに登録します。
v4 over v6 ポート開放
RTX830でv4 over v6のポート開放を行います。
詳細設定のNATディスクリプターの一覧からMAP-Eの設定に進みます。
静的IPマスカレードの設定を行います。
識別番号は適当に
内側アドレスはラズパイのローカルIPv4アドレス
プロトコルはudp
ポート番号はpivpnに入力したものを入力します。
確認ボタンを押したらポート開放完了です。
これでpivpnを有効にしたときに繋がるようになるはずです。
IPv6ネイティブでのVPN
v6ネイティブで作ることもできましたが、安定しないのでおすすめはできません。
携帯の通信がv6であれば問題ないですが、v4で通信をしていると繋がりません。
そして作り方も適当です。実用性はあんまりないと思います。
IPv6 DDNSの設定
wireguardはv6のアドレスをそのまま使うことができないのでddnsを利用します。
ソフトイーサの open ipv6 ddnsを利用してv6のddnsを取得します。
ここで入力するipv6アドレスはラズパイでifconfigコマンドを打つことで確認できます。
eth0のinet6に書いてあるアドレスを登録します。(有線LAN接続の場合)
ddnsが取得出来たら、pivpnの初期設定時のdnsのところに入力します。
ポート番号は何でもいいので、セキュリティが高そうな適当な番号を入力します。
v6 filterの設定
v6の場合はGUIでの設定ができないため、コマンドでの操作になります。
下記の2つだけを入力するだけです。
ipv6 filter 20000 pass * IPアドレス udp * ポート番号 ipv6 lan2 secure filter in 101000 101001 101002 101003 20000
IPアドレスのところはラズパイのv6アドレスを入力します。
ポート番号はpivpnに指定したものを入力します。
緑色の番号は適当につけただけなので好きなものに変えても問題ないです。
ipv6 lan2 secure filterのほかの数字はデフォルトのままになっていますので、変更している場合は調整してください。
このコマンドでラズパイに登録したVPN用のポートがv6で通信できるようになります。
接続テスト
ドコモ回線とソフトバンク回線の2つを使ってテストしてみました。
ドコモ回線はv4で通信をしていたのでvpnに接続ができませんでした。
ソフトバンク回線はv6だったので無事につながりました。
携帯回線がv6に安定して繋がっていれば使えるかもしれませんが、v4 over v6でVPNしたほうが安定していて使いやすいと思います。
コメント