【OpenMPTCProuter】ポートフォワーディングとPiVPN(WireGuard)でVPNを実現【ラズパイ4】

OpenMPTCProuterの設定でWireGuardができるっぽいけど、あきらめました(唐突)。
OpenMPTCProuterのベースはOpenWrtなので、以下のサイトを参考にできそうな気配はありました。
yassi.hatenablog.com
qiita.com


しかし、ゾーン作ったりするあたりから手順が億劫すぎたので、これならもはや自宅ローカルネットにあるラズパイ4で、PiVPNを使ってWireGuardを入れたうえで、ポートフォワーディングしたほうが手っ取り早いという結論に至りました。
現状のラズパイ4はファイルサーバとして動いているだけですが(VPNサーバ機能は一旦オミットした)、スペック的にまだまだいろいろできるので、再度VPNサーバとして動かす。また先日取り上げたpi-holeを入れることを考慮中。
 
ラズパイにPiVPNでWireGuardを入れたのは過去にやったので省略。
engetu21.hatenablog.com
 
OpenMPTCProuterでのポートフォワーディング設定は以下の通り。
メニューの[ネットワーク]→[ファイアウォール]→[ポートフォワーディング]→[追加]でダイアログを開く

名前:適当
プロトコルUDP
送信元ゾーン:vpn
外部ポート:51820
宛先ゾーン:lan
内部IPアドレス:ラズパイ4のIPアドレス
内部ポート:51820
 
注意すべき点は、送信元ゾーンを「vpn」とすること。外部からのアクセスとなるため、「wan」で設定するかと思いましたが、そうでもないらしい。ベースとなっているOpenWrtでは「wan」を設定する模様。OpenMPTCProuterはVPSVPNで繋げてるから特殊なのだろうと推測。
設定は公式の資料を参考にしました。
github.com

しかし、公式だと一旦OpenMPTCProuterにポートフォワーディングしてから、SNAT設定で目的のサーバに通信を流してるように見える。これでもできる模様(SSHでアクセスできるのは確認。ただし公開鍵方式にしてると、秘密鍵が転送されない?っぽくてログインできず。パスフレーズならいけるかもしれない)だが、なぜこんな回りくどい方法をしているかは不明。
 
これを保存と適用で完了。
なお、このファイアウォールで設定した内容は、どうやらVPS側にファイアウォール設定として適用されるらしい。
正確にはVPSのshorewallの設定が変更され、かつshorewallが即時に再起動されて(iptablesの設定として)適用される模様。

VPSのshorewallのルール設定ファイルを見ると、以下の項目が追加されます。

$ sudo view /etc/shorewall/rules
(略)
DNAT net vpn:$OMR_ADDR udp 51820 # OMR openmptcprouter redirect router 51820 port udp

netはインターネット側のネットワークで、vpnは(VPSも含めた)OpenMPTCProuterのローカル側のネットワーク。UDP51820のポートをDNAT設定するよ、というのが自動的に設定されるようです。
 
スマホのWireGuardクライアントから正常にアクセスできることができたため、これで公衆WiFiを利用する場合も暗号化通信ができます。
あと、OpenMPTCProuterによるポートフォワーディングは、以下のSSHポートフォワーディングの代替が可能となるため(VPSを媒介にするという点で原理的には同じになる)、特に記事にはしませんが、今回と同じ手順で設定する予定です。
engetu21.hatenablog.com