基于3台Ubuntu主机的SSH跨防火墙连接配置咨询
基于3台Ubuntu主机的SSH跨防火墙连接配置咨询
嘿,我看你已经在尝试用DNAT的方式实现不用-J或ProxyCommand参数的SSH跳转了,这个思路挺巧妙的!我来帮你梳理下当前的配置,并给出一些验证和优化的建议,确保你的连接能正常工作:
你的环境与需求梳理
- 三台Ubuntu主机的IP与SSH端口信息:
- 发起连接的客户端主机:
192.168.1.2 - 中转网关主机:
192.168.1.3,SSH端口为22822 - 目标主机:
192.168.1.4,使用SSH默认端口22
- 发起连接的客户端主机:
- 核心需求:从第一台主机直接执行
ssh user@192.168.1.3 -p 22822就能连接到第三台主机,且不使用-J或ProxyCommand这类代理参数
已完成的UFW配置分析
中转网关(第二台主机)的关键配置
你做的这些配置是实现DNAT转发的核心,方向是对的:
- 允许外部访问
22822端口:sudo ufw allow 22822 - 修改UFW默认转发策略为
ACCEPT,确保转发规则能生效:sudo nano /etc/default/ufw # 将 DEFAULT_FORWARD_POLICY 改为 "ACCEPT" - 在
before.rules中添加DNAT规则,把访问22822端口的TCP流量转发到第三台主机的22端口:sudo nano /etc/ufw/before.rules # 注意要把这段内容放在*filter配置段之前 :PREROUTING ACCEPT [0:0] -A PREROUTING -p tcp --dport 22822 -j DNAT --to-destination 192.168.1.4:22 COMMIT - 重启UFW让所有配置生效:
sudo ufw disable sudo ufw enable
目标主机(第三台主机)的配置
你已经开放了22端口,确保中转过来的SSH流量能被接收:
sudo ufw allow 22
验证与优化建议
- 务必开启内核IP转发:
中转网关主机需要开启IPv4转发功能,否则DNAT规则无法正常工作。你可以这样检查并开启:# 临时开启(重启后失效) sudo sysctl net.ipv4.ip_forward=1 # 永久开启(写入配置文件,重启后依然生效) echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p - 测试连接是否正常:
从第一台主机执行你期望的命令:
如果连接失败,可以在中转网关主机上抓包验证流量是否被正确转发:ssh user@192.168.1.3 -p 22822sudo tcpdump -i any port 22822 or port 22 - 安全性优化建议:
- 限制
22822端口的访问源,只允许第一台主机的IP访问,避免端口暴露给整个网段:sudo ufw delete allow 22822 sudo ufw allow from 192.168.1.2 to any port 22822 - 目标主机的
22端口也可以限制只允许中转网关的IP访问,进一步降低安全风险:sudo ufw delete allow 22 sudo ufw allow from 192.168.1.3 to any port 22
- 限制
备注:内容来源于stack exchange,提问作者nulltogeek




