You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两台仅监听VPN地址的VPS无需VPN直接互访

如何实现两台仅监听VPN地址的VPS无需VPN直接互访

首先得明确问题核心:你的两台VPS的sshd都只绑定了各自的VPN内网地址,直接用公网IP访问时,22端口根本没在监听,自然连不上。下面给你两个针对性的解决方案,都能满足“仅允许对方VPS直接访问,不开放给其他公网用户”的需求:

方案一:修改sshd配置,添加公网IP监听并限制访问来源

这个方案让sshd同时监听VPN地址和公网IP,但只允许对方VPS的公网IP通过公网地址连接,其他用户还是只能通过VPN访问。

操作步骤(以第一台VPS为例):

  1. 编辑sshd_config文件:
vi /etc/ssh/sshd_config
  1. 保留原有的ListenAddress规则,新增公网IP的监听:
ListenAddress 192.170.0.1  # 原VPN地址监听
ListenAddress 192.168.0.1  # 新增公网IP监听
  1. 添加访问限制规则,只允许第二台VPS的公网IP(170.168.0.1)通过公网地址连接,同时保留VPN网段的访问权限:
# 允许VPN网段所有用户访问,同时允许第二台VPS的公网IP访问root用户
AllowUsers root@192.170.0.0/24 root@170.168.0.1

或者用更灵活的Match块:

Match Address 170.168.0.1
    AllowUsers root
  1. 验证配置是否合法,避免重启后服务异常:
sshd -t
  1. 重启sshd服务使配置生效:
systemctl restart sshd

做完这些,你在第二台VPS上直接执行ssh root@192.168.0.1就能连上第一台了,其他公网用户依然无法通过192.168.0.1访问。

方案二:用iptables做端口转发,无需修改sshd配置

如果不想改动sshd的监听设置,也可以通过iptables的NAT转发,把来自第二台VPS的公网IP的22端口请求,转发到第一台的VPN地址的22端口上。

操作步骤(以第一台VPS为例):

  1. 添加DNAT转发规则:
iptables -t nat -A PREROUTING -s 170.168.0.1 -p tcp --dport 22 -j DNAT --to-destination 192.170.0.1:22

这条规则的意思是:所有来自170.168.0.1(第二台VPS公网IP)的TCP 22端口请求,都转发到本地的192.170.0.1:22(sshd监听的VPN地址)。
2. 保存iptables规则,防止重启VPS后失效:

  • Debian/Ubuntu系统:
iptables-save > /etc/iptables/rules.v4
  • CentOS/RHEL系统:
service iptables save

现在你在第二台VPS上直接ssh root@192.168.0.1,请求会被第一台的iptables转发到VPN地址的sshd,就能顺利连接了。

两种方案对比

  • 方案一更直观,权限控制更精细,但需要重启sshd服务(如果在线业务依赖sshd,建议先在测试环境验证)。
  • 方案二无需改动sshd配置,不影响现有VPN用户的访问,适合不想重启服务的场景。

备注:内容来源于stack exchange,提问作者Hakim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:58:14