OpenVPN 专用网络接口

OpenVPN 专用网络接口

我正在尝试使用 OpenVPN 客户端服务通过特定应用程序提供 VPN 连接。就我而言,我想设置我的 Tor 并且仅设置 Tor 连接来通过 VPN。我应该如何实现这一目标?我尝试添加一个链接ip link add,包括tuntapdummy(我在这个界面上浪费了很多时间,我对此感到羞愧)界面。但是,当我通过指定来让 OpenVPN 使用tun0接口时,由于某种原因,它泄漏到了我的接口上,通过 确认了这一点。 如果这有帮助的话,我的设置是:WSL2.0,Debian 12。dev tun0/etc/openvpn/client.confeth0curl https://ipconfig.me/ip

答案1

我做了类似的事情,使用网络命名空间和 veth 设备来防止 OpenVPN 干扰 SSH 和其他服务。步骤摘要我几年前的博客文章:

  1. 设置命名空间并输入:

    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)。

  2. 创建 veth 对并将其中一个移动到默认命名空间(我们已经位于新命名空间的 shell 中,因此设备是在其中创建的):

    ip link add dev veth1 mtu 1500 type veth peer name veth2 mtu 1500
    ip link set dev veth2 netns default
    
  3. 打开我们的 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
    
  4. 通过正确的网络接口路由到外部网络(这里,我假设它的 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
    
  5. 使用 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
    
  6. 使用启用 IPv4 转发sysctl

    sysctl -w net.ipv4.ip_forward=1
    

在此网络命名空间中启动 OpenVPN(例如,通过openvpn在此处运行命令本身,或使用 systemd 将其链接到此命名空间),然后在同一命名空间中运行需要 VPN 的任何服务。

相关内容