设想 :
我必须在没有公共 IP 的“服务器 B”上托管一个 Web 服务器/SSH 服务器,
我购买了具有公共 IP 的 VPS“服务器 A”,并且正在进行反向 SSH 端口转发
Internet --> 22 : "Server A" --> 22 : Server B
Internet --> 443 : "Server A" --> 443 : Server B
因此,访问端口 22 上的“服务器 A”将按预期转发到端口 22 上的“服务器 B”
问题:
我看不到在“服务器 B”上访问的源 IP,我只看到源 IP 作为本地主机,由于 SSH 经常受到暴力攻击,我需要在“服务器 B”上使用 fail2ban,但由于没有源 IP,这毫无用处。
我无法将端口从 22 更改为其他端口。
我已尝试使用 VPN 从“服务器 B”连接到“服务器 A”,但无法在“服务器 A”设置 iptables 规则以将特定端口从“服务器 A”转发到“服务器 B”。
我该怎么做才能获得“服务器 B”上的源 IP?
谢谢。
答案1
Server-A = Private IP 192.168.1.1 with Public IP 1.2.3.4 (has direct internet access)
Server-B = 192.168.1.2 (no direct internet access)
Client-PC = Public IP 5.6.7.8 (router's ISP address)
您必须摆脱 SSH 隧道才能实现您的目标。当Client-PC
尝试连接到 时Server-A
,必须将其重定向到Server-B
。TCP 22
从Server-B
角度来看,SSH 流量来自5.6.7.8
在充当 Linux 网关的主机(本例中为 Server-A)上,执行以下操作:
$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 192.168.1.2:22
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
从Server-B
,确保它知道如何将返回流量发送回5.6.7.8
如果没有,则添加静态路由Server-B
$ sudo ip route add default via 192.168.1.1