iptables:如何将目的端口80的报文从eth0转发到eth1?

我有几台机器上的http和httpsstream量到我的Linux机器上的eth0上,但是我想把这些stream量转发到eth1,它可以访问互联网。 并且将来自80和443的stream量的免费操作从eth1路由到eth0,以便它们到达创buildweb请求的机器。

我试过下面的iptables命令,但是没有帮助:

iptables -A FORWARD -p tcp --dport 80 -o eth1 -j ACCEPT iptables -A FORWARD -p tcp --sport 80 -o eth0 -j ACCEPT 

我不知道如何去做这件事。

=====================

ip addr show输出

 $ /sbin/ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether <mac_address_of_eth0> brd ff:ff:ff:ff:ff:ff inet 10.10.12.131/24 brd 10.10.12.255 scope global eth0 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether <mac_address_of_eth1> brd ff:ff:ff:ff:ff:ff inet 172.16.1.1/24 brd 172.16.1.255 scope global eth1 

首先,这是两个接口之间iptables转发的非常类似的问题。

这就是说,你希望你的主机成为一个网关,但更具体的,只有协议HTTPHTTPS (80/443)。 要做到这一点,您应该:

  1. 能够在这两个接口之间转发stream量
  2. 转发目标端口为80(HTTP)的数据包
  3. 转发目标端口443(HTTPS)
  4. 由于iptablesnetfilter )是一个stateless packet filtering system ,接受返回的数据包
  5. 源NAT(更改源IP地址)到您的主机的IP

翻译成iptables:

 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED \ -j ACCEPT iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 

如果networking上的其他主机正在使用您的主机访问Internet(意味着您的Linux机器充当网关)。

假设eth1有一个公共的networking地址,这听起来像你希望你的Linux机器成为一个路由器,可能与NAT /伪装function。 有关许多示例之一,请参阅http://www.howtoforge.com/internet-connection-sharing-masquerading-on-linux

您提供的IPtables只允许 HTTPstream量通过您的Linux机器转发,但您需要确保您的客户机使用您的Linux机器作为网关来实现此目的。