今時の泥端末からおうちにVPNを貼る
泥12以降だとL2TP/IPsecが新規設定出来ないとか面倒とかまあその辺です。
ほぼstaticなグローバルIPv4アドレスが降られている場合です。面倒な環境の場合はその辺のあれこれを加えてください(?)
Androidで使い物になりそうなVPN Client
OpenVPN
OpenVPN Connect(公式版の方)
OpenVPN for Android (非公式の方)
後者がOSSなのもあってうちでの動作確認は後者でやってました。
SoftEtherのOpenVPNを有効にする
まあ建ててる人なら簡単ですよね。
出てきたconfigをクライアントに食わせればOKです。
WireGuardを建てる
最初ArchWikiみてもよくわかんなかったんですけど、最初のあれこれ読んでも分かるようにならなかった(たぶん自分の頭が悪いだけ)ので、いきなりVPN鯖用途のところを見た方がいいかもです
wg-quick upだとよくよく考えたらコンテナ毎落ちちゃうよねまでは気づいて、めんどいのでsyslogd -nで逃げちゃいましたが、今思えば
while true; do sleep 1m; done
とかでいいですね。なんで思いつかなかったんだろ
version: "3.8"
services:
wireguard:
build: ./
cap_add:
- NET_ADMIN
ports:
- target: 61820
published: 61820
protocol: udp
mode: ingress
restart: unless-stopped
volumes:
- type: bind
source: wg
target: /etc/wireguard
FROM debian:bookworm-slim
RUN apt update && apt install -y wireguard iproute2 procps iptables iputils-ping inetutils-syslogd
CMD wg-quick up wg0 && syslogd -n
俺得、適当に鍵を作るだけスクリプト。よくわかってないのでたぶん真似しない方が良いです。
#!/bin/bash
cd /etc/wireguard
mkdir temp
wg genkey > ./temp/key
echo -n "privatekey: "
cat ./temp/key
echo -n "publickey: "
wg pubkey < ./temp/key
rm -r temp
鯖側wg0.conf、死ぬほど適当なのでこれも真似しないように
[Interface]
# interface wg0でのIP
Address = 10.12.23.1
ListenPort = 51820
PrivateKey = 鯖のPrivateKey
# note - substitute eth0 in the following lines to match the Internet-facing interface
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer] # CF-RZ5
PublicKey = クライアントのPublicKey
AllowedIPs = 10.12.23.2
[Peer] # test
PublicKey = クライアントのPublicKey
AllowedIPs = 10.12.23.3
[Peer] # X818U
PublicKey = クライアントのPublicKey
AllowedIPs = 10.12.23.4
クライアント側
[Interface]
PrivateKey = X818UのPrivateKey
Address = 10.12.23.4
DNS = 10.12.22.254 (適当なDNS鯖、面倒なので家のルーターに向けてる)
[Peer]
PublicKey = 鯖のPrivateKey
EndPoint = おうちに対してのFQDN:51820
AllowedIPs = 10.12.23.0/32, 10.12.22.0/24
AllowedIPsはクライアント側で定義するとこっちから、アクセスするIPを指定するみたいな感じ(確か微妙に違うんだけど)
DNSはなんか微妙にハマったところで全部こっち経由で通信したいってなったときにおうち以外の何かしらに繋ぐことが出来なくて????になっていたらこれでした。これはWireguardなInterface内で発生した名前解決に使われているっぽくて0.0.0.0/0とかやらない限りはこっちに流れないはず(=wireguard経由にならない場合)なので、
WireGuardをSoftEtherで立てる(おまけ)
dev版(5系)の実装なので動かなくても、泣かない。
ビルドしても良いしAzureのWorkflowのartifactからNightlyを持ってきても良いです。
http://web.archive.org/web/20210421084355/https://w.vmeta.jp/tdiary/20210327.html
これみればなんとかなるぐらいにはちゃんと書いてあったので読んだ方が良いです。
ちなみに個人的ハマりポイントはUDPのポートを空けてなかったことです(使ってなかった)。適当に空けたポートで待ち受けてくれるのでお好きなのを開けましょう。
鍵生成を↑ではwgコマンド叩いてますが、後から実装されたらしくてこれでも可能っぽいです(未確認)
Client側も本家WireGuardで作るときと同じなので省略
外から入れる経路を確保し直せた上に、ArchなRZ5でも外から楽に入れるようになったのでよしとしましょう。
次やるとしたらstrongSwan?