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

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

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

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

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

答案1

您需要向服务器添加路由,以便 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

确认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

ps:我记得第一次在 Linode 论坛上了解到这一点 - google 一下,你应该能够找到关于此的帖子。

答案2

假设您的VPS服务器公共IP是1.2.3.4,您的VPN公共IP是5.6.7.8

我会编辑文件/etc/ssh/sshd_config并添加一行:

ListenAddress 1.2.3.4

因此可以从 VPN 连接外部访问 SSHd。

相关内容