今時の泥端末からおうちに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系)の実装なので動かなくても、泣かない。

SoftEtherVPN/SoftEtherVPN: Cross-platform multi-protocol VPN software. Pull requests are welcome. The stable version is available at https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.

ビルドしても良いしAzureのWorkflowのartifactからNightlyを持ってきても良いです。

http://web.archive.org/web/20210421084355/https://w.vmeta.jp/tdiary/20210327.html

これみればなんとかなるぐらいにはちゃんと書いてあったので読んだ方が良いです。

ちなみに個人的ハマりポイントはUDPのポートを空けてなかったことです(使ってなかった)。適当に空けたポートで待ち受けてくれるのでお好きなのを開けましょう。

鍵生成を↑ではwgコマンド叩いてますが、後から実装されたらしくてこれでも可能っぽいです(未確認)

Cedar/Command: Add GenX25519 and GetPublicX25519 commands by davidebeatrici · Pull Request #1415 · SoftEtherVPN/SoftEtherVPN

Client側も本家WireGuardで作るときと同じなので省略

外から入れる経路を確保し直せた上に、ArchなRZ5でも外から楽に入れるようになったのでよしとしましょう。

次やるとしたらstrongSwan?

コメントする

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください