我有一个带有两个 NIC 的服务器: eth4 - 侦听外部网络。eth1 - 与机器 Y 位于同一网络上。
我希望能够通过以下方式通过 ssh 进入机器 Y:ssh server -p 1234
从外部网络。
我提出了以下规则:
iptables -A PREROUTING -i eth4 -t nat -p tcp --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to-destination $MACHINE_Y_IP:22
和
iptables -A FORWARD -i eth4 -o eth1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
当我尝试 ssh 时,连接不会立即被拒绝,但感觉 iptables 没有转发数据包。关于我可能做错了什么的任何线索?操作系统是 SLES,如果这对语法很重要。
编辑:
sysctl net.ipv4.ip_forward
报告net.ipv4.ip_forward = 1
iptables-save
产生:
`# Generated by iptables-save v1.4.2-rc1 on Fri Nov 12 10:28:26 2010
*mangle
:PREROUTING ACCEPT [48787:5748712]
:INPUT ACCEPT [48725:5742333]
:FORWARD ACCEPT [29:1740]
:OUTPUT ACCEPT [25938:4009532]
:POSTROUTING ACCEPT [25967:4011272]
COMMIT
# Completed on Fri Nov 12 10:28:26 2010
# Generated by iptables-save v1.4.2-rc1 on Fri Nov 12 10:28:26 2010
*nat
:PREROUTING ACCEPT [68959:12817029]
:POSTROUTING ACCEPT [19579:1207747]
:OUTPUT ACCEPT [19566:1206967]
-A PREROUTING -i eth4 -p tcp -m tcp --dport 1234 -m state --state NEW,RELATED,ESTABLISHED -j DNAT --to-destination x.x.x.x:22
COMMIT
# Completed on Fri Nov 12 10:28:26 2010
# Generated by iptables-save v1.4.2-rc1 on Fri Nov 12 10:28:26 2010
*filter
:INPUT ACCEPT [60982622:59727981305]
:FORWARD ACCEPT [10:600]
:OUTPUT ACCEPT [32438834:64059260511]
-A FORWARD -i eth4 -o eth1 -p tcp -m tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Fri Nov 12 10:28:26 2010`
Run Code Online (Sandbox Code Playgroud)
规则应该是这样的。
iptables -t nat -I PREROUTING -p tcp -i eth4 --dport 1234 -j DNAT --to server:22
iptables -A FORWARD -i eth4 -o eth1 -p tcp --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
不要在状态模块中混入。这很可能是导致您出现问题的原因。NAT 模块将保留您需要的状态。
哦,确保你也打开了 ip_forwarding ;)