两台配置OpenVPN且SSH仅监听VPN地址的VPS实现直接互访的方法咨询
两台配置OpenVPN且SSH仅监听VPN地址的VPS实现直接互访的方法咨询
看起来你已经把两台VPS的SSH服务都限制为只能通过各自的VPN内网访问,安全性做得很到位!现在要实现第二台VPS直接用第一台的公网IP(192.168.0.1)SSH登录,同时不破坏原来的安全规则,我给你整理了几个可行的方案:
方案一:给SSH添加公网监听地址,同时限制仅允许第二台VPS访问
这个方法让SSH同时监听VPN地址和公网IP,但只放行第二台VPS的公网IP(170.168.0.1)通过公网IP连接,其他外部IP依然无法访问。
步骤如下:
- 编辑第一台VPS的
sshd_config文件:sudo nano /etc/ssh/sshd_config - 在原有的
ListenAddress 192.170.0.1下方,添加一行监听公网IP的配置:ListenAddress 192.168.0.1 - 在文件末尾添加匹配规则,严格限制只有第二台VPS能通过这个公网地址连接:
# 仅允许第二台VPS的公网IP访问第一台的公网SSH端口 Match LocalAddress 192.168.0.1 Address 170.168.0.1 AllowUsers root # 替换成你实际使用的登录用户名 - 保存文件后,重启SSH服务让配置生效:
# Debian/Ubuntu系统 sudo systemctl restart ssh # CentOS/RHEL系统 sudo systemctl restart sshd
设置完成后,第一台VPS的SSH既保留了VPN内网的访问权限,又允许第二台VPS通过公网IP直接登录,其他外部IP依然无法通过公网访问。
方案二:利用防火墙规则转发流量(无需修改SSH配置)
如果你不想改动SSH的监听地址,可以用iptables把来自第二台VPS的22端口流量转发到VPN监听地址上。
步骤如下:
- 临时启用第一台VPS的IP转发(要永久生效需编辑
/etc/sysctl.conf,设置net.ipv4.ip_forward=1后执行sudo sysctl -p):sudo sysctl -w net.ipv4.ip_forward=1 - 添加iptables规则,将来自第二台VPS的22端口请求转发到VPN地址:
# 把来自170.168.0.1的22端口请求转发到192.170.0.1:22 sudo iptables -t nat -A PREROUTING -s 170.168.0.1 -p tcp --dport 22 -j DNAT --to-destination 192.170.0.1:22 # 放行转发的流量 sudo iptables -A FORWARD -s 170.168.0.1 -d 192.170.0.1 -p tcp --dport 22 -j ACCEPT - 保存iptables规则(不同系统命令不同):
# Ubuntu系统 sudo iptables-save > /etc/iptables/rules.v4 # CentOS系统 sudo service iptables save
这样设置后,第二台VPS执行ssh root@192.168.0.1时,流量会被第一台的防火墙自动转发到VPN监听地址,实现直接登录,其他外部IP的22端口请求依然会被拒绝。
方案三:建立点对点专用VPN隧道(适合长期互访需求)
如果两台VPS需要频繁互访,可以在它们之间搭建一个点对点的专用VPN隧道(比如WireGuard或OpenVPN站点到站点模式),这样它们就能通过专用隧道的内网地址直接访问,不需要依赖各自的用户VPN。不过这个方案配置相对复杂,适合有长期互访需求的场景。
⚠️ 注意:不管用哪个方案,都建议先保持一个通过VPN连接的备用SSH会话,再修改配置,避免不小心断连无法登录。
备注:内容来源于stack exchange,提问作者Hakim
相关产品推荐
相关产品推荐

