我正在尝试使用 OpenVPN 客户端服务通过特定应用程序提供 VPN 连接。就我而言,我想设置我的 Tor 并且仅设置 Tor 连接来通过 VPN。我应该如何实现这一目标?我尝试添加一个链接ip link add
,包括tuntap
和dummy
(我在这个界面上浪费了很多时间,我对此感到羞愧)界面。但是,当我通过指定来让 OpenVPN 使用tun0
接口时,由于某种原因,它泄漏到了我的接口上,通过 确认了这一点。 如果这有帮助的话,我的设置是:WSL2.0,Debian 12。dev tun0
/etc/openvpn/client.conf
eth0
curl https://ipconfig.me/ip
答案1
我做了类似的事情,使用网络命名空间和 veth 设备来防止 OpenVPN 干扰 SSH 和其他服务。步骤摘要我几年前的博客文章:
设置命名空间并输入:
NS_NAME=vpn ip netns add "$NS_NAME" ip netns exec "$SHELL" ln -s /proc/1/ns/net /var/run/netns/default
在这里,我们创建一个名为“
vpn
”的新网络命名空间,并在其中启动一个 shell。由于默认命名空间可能没有名称,因此我们为其设置一个名称 (default
)。创建 veth 对并将其中一个移动到默认命名空间(我们已经位于新命名空间的 shell 中,因此设备是在其中创建的):
ip link add dev veth1 mtu 1500 type veth peer name veth2 mtu 1500 ip link set dev veth2 netns default
打开我们的 veth 接口并为其分配 IP:
ip addr add dev veth1 10.0.0.1/24 ip link set veth1 up ip netns exec default ip link set veth2 up
通过正确的网络接口路由到外部网络(这里,我假设它的 IP 是 192.168.1.2)并路由回来:
ip route add 192.168.1.2/32 dev veth1 ip route add default via 192.168.1.2 ip netns exec default ip route add 10.0.0.0/24 dev veth2
使用 iptables 设置数据包转发:
ip netns exec default iptables -A FORWARD -i veth2 -o eth0 -j ACCEPT ip netns exec default iptables -A FORWARD -o veth2 -i eth0 -j ACCEPT ip netns exec default iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
使用启用 IPv4 转发
sysctl
sysctl -w net.ipv4.ip_forward=1
在此网络命名空间中启动 OpenVPN(例如,通过openvpn
在此处运行命令本身,或使用 systemd 将其链接到此命名空间),然后在同一命名空间中运行需要 VPN 的任何服务。