💾 Archived View for pixeldreams.tokyo › technomancy › netns-vpn.gmi captured on 2024-07-08 at 23:40:29. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-03-21)
-=-=-=-=-=-=-
㋿ 6-3-13 水 晴れ
netnsとはリナックスカーネルのネットワーク・ネームスペースという機能のことです。ネットワーク・ネームスペースを作ることで、新たなルーティング・テーブル、インターフェースなど通常のものと分けて管理できます。要はネットワークだけにおけるコンテナーのようなものです。
netnsを利用してvpnインターフェースを管理すると、一部のアプリのみネームスペース内で実行して、vpnインターフェースしか見えないようにすることができます。こうすることで通信が漏れる恐れががなくなるのです。
wireguardインターフェースを作成します。wireguardインターフェースは、作成時のネームスペースを記憶する機能があるので、一度デフォルトネームスペースで作成します。それから、別のネームスペースに移動することで、トンネル管理の通信は通常のインターフェースを通るが、wgインターフェース自体は新たなネームスペースに移動されます。
# ip netns add vpn # ip link add wg0 type wireguard # ip link set wg0 netns vpn
これから、wg0を操作するときはネームスペースを指定します。
# ip -n vpn link show wg0
続いてwg0の設定を行います。
# ip -n vpn addr add $VPN_CLIENT_IP dev wg0 # ip netns exec vpn wg setconf wg0 /etc/wireguard/wg0.conf # ip -n link set wg0 up # ip -n vpn route add default dev wg0
wg0を使うときは、ip netns exec $namespace...コマンドが使えます。例えば、シェルを実行することなど:
# ip netns exec vpn bash # ip a 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 3: mullvad0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet xx.xx.xx.xx/32 scope global mullvad0 valid_lft forever preferred_lft forever # ip route show default dev mullvad0 scope link #
このシェルから実行されたアプリケーションはすべて、この方法で作成したmullvad0というwireguardインターフェースを通ることになっています。
真ん中あたりのMULLVAD_CONF、MULLVAD_CLIENT_IP変数を正しく設定してね
#!/bin/sh if [ $UID -ne 0 ]; then echo 'run as root' exit 1 fi if ! which ip 2>&1 >/dev/null ; then echo 'ip command not found. make sure $PATH is correct' exit 1 fi usage() { echo "$0 <up|down>" } MULLVAD_CONF='/etc/wireguard/mullvad1.conf' MULLVAD_CLIENT_IP=$(grep '# Address' $MULLVAD_CONF | awk '{print $4}') IFACE='mullvad0' NS='vpn' set -x case $1 in up) ip netns add $NS ip link add $IFACE type wireguard ip link set $IFACE netns $NS ip -n $NS addr add $MULLVAD_CLIENT_IP dev $IFACE ip netns exec $NS wg setconf $IFACE $MULLVAD_CONF ip -n $NS link set $IFACE up ip -n $NS route add default dev $IFACE ;; down) ip -n $NS link del $IFACE ip netns del $NS ;; *) usage ;; esac