端口转发 - 反向 SSH - 源 IP

端口转发 - 反向 SSH - 源 IP

设想 :

我必须在没有公共 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-BTCP 22Server-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

相关内容