网络命名空间

来自百合仙子's Wiki
跳转到导航 跳转到搜索

在新的网络命名空间中连接 OpenVPN

# 添加一个网络命名空间
ip netns add vpn

# 添加一对虚拟网络接口
ip link add vpn0 type veth peer name vpn1
# 将其中一端加入 br0 网桥。此网桥已经配置好并且联网
brctl addif br0 vpn0
# 移动另一端到新添加的网络命名空间
ip link set vpn1 netns vpn

# 通过网桥联网
ip link set vpn0 up
ip netns exec vpn ip address add dev vpn1 192.168.57.101/24
ip netns exec vpn ip link set vpn1 up
ip netns exec vpn ip route add default via 192.168.57.1

# 可以用了
ip netns exec vpn openvpn ...

与 mount 命名空间同时使用

# 建立一个 mount 命名空间跑 shell
mkdir -p /var/run/ns
mount --bind /var/run/ns /var/run/ns
mount --make-private /var/run/ns
cp /etc/resolv.conf /var/run/ns
unshare --mount=/var/run/ns/resolv.conf ip netns exec vpn zsh
# 然后可以在里边改 DNS 解析了
mount --bind /var/run/ns/resolv.conf /etc/resolv.conf

# 以后可以直接进去了
nsenter --mount=/var/run/ns/resolv.conf --net=/var/run/netns/vpn zsh

再加上 pid 命名空间

# 创建
unshare --mount-proc -f --pid=/var/run/ns/pid --mount=/var/run/ns/resolv.conf nsenter --net=/var/run/netns/vpn su - lilydjwg
# 进入时用 -t 选项,或者重新 bind mount 文件(不然新进程会在原 pid 命名空间)
nsenter -t 9416 --mount=/var/run/mountns/resolv.conf --net=/var/run/netns/vpn --pid su - lilydjwg

注意:当 pid 命名空间内的 init 进程退出之后,此 pid 命名空间即不能再次被使用。

环境变量

export DISPLAY=:0 LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh_TW
export GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
export TMUX=1

参见

外部链接