我有一台 Ubuntu PC,带有两块网卡,用作路由器。一块网卡 eth0 连接到互联网,另一块网卡 eth1 连接到 LAN。我想将 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
EXTIF是外部接口(eth0),INTIF是内部接口(eth1),EXTIP是eth0的IP地址。
有什么帮助吗?(不确定问题是否清楚,如果有人理解我的意图,请使用正确的术语进行编辑)
答案1
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
答案2
你启用 IP 转发?