FreeBSD + WireGuardでAndroidとのVPNトンネルを作る
2 min read
こんにちは、無能です。
前回の記事で速度結果だけ載せましたがトンネルを作る手順です。
他に日本語記事で見つからなかったので記録しておきます。
WireGuard
スマホ側(クライアント)
PC側でWireGuardの鍵生成の必要があります。
wg genkey | tee private.key
wg genpsk | tee psk.key
秘密鍵さえ作れば、公開鍵はスマホ版のWireGuard側で表示されるのでここで作らなくてもOKです。
別に一緒にwg genkey | tee private.key | wg pubkey > pub.key
で作ってもOKです。
一旦この鍵をスマホに渡してWireGuardのスマホアプリの
秘密鍵 = private.keyの内容
事前共有鍵 = psk.keyの内容
アドレス = やりとりしたいIP, 今回は`10.1.0.4/32`とします
エンドポイント = WireGuardサーバーのグローバルIP:51820
Allowed IPs = 0.0.0.0/0 , ::/0 # 全てをVPN介する
を入力し、このときに生成された公開鍵をサーバー側に送るかペーストできる用にしておきます。
PC側(サーバー側)
まずはWireGuardを入れている前提として、末尾の方にPeerを追加します。
[Peer]
PublicKey = スマホ側でprivate.keyを入力したあとに表示されている公開鍵又は、pub.keyの内容
PreSharedKey = psk.keyの内容
AllowedIPs = 10.1.0.4/32
PersistentKeepalive = 25
これで一旦wg quick up wg0
しておきます。VPNをスマホ側でOnにして転送ができていればOKです。しかしこのままではWireGuardのトンネル内でしか行き来できていないのでNATでルールを作る必要があります。
FreeBSD
まずはIPv4とIPv6に対してのポートフォワードを有効化します。
vi /etc/sysctl.conf
これで以下を追記
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
これで再起動します。
そしてpfでルールを作ります。
vi /etc/pf.conf
そして以下を追記
wireguard_clients=10.1.0.4
wanint="vtnet0"
wg_ports="{51820}"
nat on $wanint inet from $wireguard_clients to any -> $wanint
pass in on $wanint proto udp from any to $wanint port $wg_ports
pass out quick
その後有効化
pfctl -nf /etc/pf.conf
エラーでなければ
pfctl -f /etc/pf.conf
これで適応させます。
サーバー側のIPアドレスになっているか、シンプルで便利なたかしさんのところでIPアドレスがWireGuardサーバー側のIPになっているか見てみましょう。
bibi.moe/ip
これで終了です。
これが行えれば、ローカル環境で立ち上げてるサービスを家のサーバーもVPN繋げた状態でWireGuardネットワークにプロキシしてる場合スマホのブラウザから家のネットワークにアクセスすることができる為、とても便利です。 それではまた。よろしくおねがいします。