如何使用iptables制定IP转发规则

时间:2012-04-25 13:40:09

标签: ubuntu network-programming tcpclient iptables tcpserver

我有两个系统A和B. A是TCP客户端,并在B上向TCP服务器发送消息。

------------------                --------------------------

  System A                        System B
  192.168.0.5 wlan0               192.168.0.3 wlan0
  127.0.0.1   lo                  127.0.0.1 lo
  TCP Client    <------------>    TCP Server on 127.0.0.1
------------------                ----------------------------

TCP客户端将消息发送到192.168.0.3。

这应该被重定向到B的本地接口,因为TCP服务器在系统B的端口8000上的127.0.0.1上运行。

因此,我编写了以下ip表规则,但是我在B的服务器没有收到任何消息。哦,顺便说一句,这两个系统都是Ubuntu linux系统。

以下是我在系统B上所做的事情:

#Enable IP Forwarding for NAT
echo "1" < /proc/sys/net/ipv4/ip_forward

#Flush all iptable chains and start afresh
sudo iptables -F

#Forward incoming packets on 192.168.0.3 at wlan0 interface to 127.0.0.1
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0 -d 192.168.0.3 --dport 8000 -j DNAT --to 127.0.0.1:8000

#Explicitly allow incoming connections on port 8000 
sudo iptables -A INPUT -i wlan0 -p tcp --dport 8000 -m state --state NEW,ESTABLISHED -j ACCEPT

#Explicitly allow outgoing messages from port 8000
sudo iptables -A OUTPUT -o wlan0 -p tcp --sport 8000 -m state --state ESTABLISHED -j ACCEPT

然后我在B上启动服务器并从A上的TCP客户端发送消息。我可以在wlan0上看到来自192.168.0.5的wireshark上的数据包,但它们永远不会被转发:(

请帮忙。

1 个答案:

答案 0 :(得分:1)

它应该是“&gt;”而不是“&lt;”:

echo "1" > /proc/sys/net/ipv4/ip_forward