我有一台服务器,我想在其上设置 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。