iptables 问题:将端口 x 转发到网络上不同机器的 ssh 端口

Geo*_*eos 3 ubuntu ssh forwarding

我有一台 Ubuntu PC,带有两个网卡,充当路由器。一张网卡eth0连接到互联网,另一张eth1连接到局域网。我想将 LAN 中不同主机的 ssh 端口暴露给外部世界的不同端口号。即“ssh user@router -p 1234”应该转到host1的ssh端口,“ssh user@router -p 3456”应该ssh到host2。我为 host1 添加了以下 iptable 规则,但它不起作用:

iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1234 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -d $EXTIP --dport 1234 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j DNAT --to-destination 10.9.0.2:22
Run Code Online (Sandbox Code Playgroud)

EXTIF是外部接口(eth0),INTIF是内部接口(eth1),EXTIP是eth0的IP地址。

有什么帮助吗?(不确定问题是否清楚,如果有人理解我的意图,请使用正确的行话进行编辑)

wol*_*gsz 5

FORWARD 链的规则需要使用目标端口,因为它是在预路由链之后执行的,即在 DNAT 完成之后。

iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

各种表和链如何链接在一起的很好的概述图如下:http : //www.csie.ntu.edu.tw/~b92035/cnl/hw1/Iptables.gif