通过公共 IP 路由所有内容,除了端口 22 上的 SSH 通过 OPEN VPN

通过公共 IP 路由所有内容,除了端口 22 上的 SSH 通过 OPEN VPN

是否可以通过开放的 VPN 连接路由 VPS [Ubuntu] SSH 服务,但允许所有其他数据通过公共地址退出?需要使用什么样的 iptables 魔法才能实现这一目标?

SSH 数据 → 通过 OPEN VPN 所有其他数据 → 通过 Public

这是连接 VPN 之前的 ifconfig 详细信息

eth0      Link encap:Ethernet  HWaddr 52:54:00:32:2a:e6
          inet addr:18x.144.31.77  Bcast:185.144.31.255  Mask:255.255.254.0
          inet6 addr: 2a03:a0e0:bad:bad::574/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::573/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::572/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::571/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::570/64 Scope:Global
          inet6 addr: fe80::5054:ff:fe32:2ae6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:73928 errors:0 dropped:1 overruns:0 frame:0
          TX packets:723 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4508581 (4.5 MB)  TX bytes:95511 (95.5 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2520 (2.5 KB)  TX bytes:2520 (2.5 KB)

连接到VPN后

eth0      Link encap:Ethernet  HWaddr 52:54:00:32:2a:e6
          inet addr:185.144.31.77  Bcast:185.144.31.255  Mask:255.255.254.0
          inet6 addr: 2a03:a0e0:bad:bad::574/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::573/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::572/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::571/128 Scope:Global
          inet6 addr: 2a03:a0e0:bad:bad::570/64 Scope:Global
          inet6 addr: fe80::5054:ff:fe32:2ae6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3749 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:282634 (282.6 KB)  TX bytes:60862 (60.8 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.2.62  P-t-P:10.8.2.61  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:65 errors:0 dropped:0 overruns:0 frame:0
          TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:7025 (7.0 KB)  TX bytes:16197 (16.1 KB)

答案1

iptables 的替代方案:使用网络命名空间。作为 root,做类似的事情

ip addr show dev tun0
ip netns add vpnssh
ip link set tun0 netns vpnssh
ip netns exec vpnssh su -c 'xterm &' user_name

其中tun0是 OpenVPN 端点的网络接口和user_name运行 的用户ssh。请注意 的 inet(我们称之为vpn_local_ip)和对等点 ( vpn_peer_ip) 地址tun0

您现在有一个 xterm,其中所有子进程只能“看到” tun0(使用 验证ip link),但不幸的是,移动它会将其放下。所以在这个窗口中,sudo使用

ip link set tun0 up
ip addr add vpn_local_ip peer vpn_peer_ip dev tun0
ip route del default
ip route add default via vpn_local_ip dev tun0

您现在可以ssh在此窗口中运行,它将使用 OpenVPN 连接。根据需要编写所有内容的脚本(用于ip netns exec vpnssh ...第二部分)。

相关内容