通过 VPN 路由除端口 22 上的 SSH 之外的所有内容

b-m*_*m-f 6 networking ubuntu vpn openvpn

我有一台服务器,我想在它上面设置一个 VPN 来路由所有流量。

当然,我不想在建立 OpenVPN 连接时阻止自己(已经这样做了!)所以我希望端口 22 不受影响并且可以像往常一样访问。

这可能吗?如果是这样,我该如何设置?

小智 14

您需要向服务器添加路由,以便 ssh 数据包通过服务器的公共 ip 而不是 vpn 进行路由。不这样做意味着 ssh 返回数据包将通过 openvpn 路由。这就是您在启动 openvpn 客户端会话后被锁定在服务器之外的原因。

让我们假设您的服务器:

  • 公共 IP 是 a.b.c.d
  • 公共 IP 子网是 a.b.c.0/24
  • 默认网关是 x.x.x.1
  • eth0 是设备到网关

iproute2是你的朋友吗?请执行下列操作:

ip rule add table 128 from a.b.c.d
ip route add table 128 to a.b.c.0/24 dev eth0
ip route add table 128 default via x.x.x.1
Run Code Online (Sandbox Code Playgroud)

执行route -n以确认新的路由表出现。如果您重新启动服务器,上述命令将不会保留。您需要将它们添加到您的网络接口配置文件中。

然后运行您的 openvpn 客户端配置 openvpn --config youropenvpn-configfile.ovpn &

增加奖金

此外,如果您希望将公共 IP 的流量限制为 ssh 并且仅使用 ssh,那么您需要iptables按如下方式添加过滤:

iptables -A INPUT -d a.b.c.d -p tcp --dport <*ssh port number*> -j ACCEPT
iptables -A INPUT -d a.b.c.d -j DROP
Run Code Online (Sandbox Code Playgroud)

ps:我记得第一次在 Linode 的论坛上了解到这个 - 谷歌它,你应该能够找到一个关于这个的帖子。