iptables:如何将目标端口为 80 的数据包从 eth0 转发到 eth1?

iptables:如何将目标端口为 80 的数据包从 eth0 转发到 eth1?

我的 Linux 机器上有来自多台机器的 http 和 https 流量,但我想将这些流量转发到可以访问互联网的 eth1。并对来自 80 和 443 的流量进行互补操作,使其从 eth1 路由到 eth0,以便它们到达创建 Web 请求的机器。

我尝试过以下 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

答案1

首先,这个问题与两个接口之间的 iptables 转发

话虽如此,您希望您的主机成为网关,但更具体地说,仅限于协议HTTPHTTPS(80/443)。 要实现这一点,您应该:

  1. 能够在这两个接口之间转发流量
  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

假设您的网络上的其他主机正在使用您的主机访问互联网(这意味着您的 Linux 机器充当网关)。

答案2

假设 eth1 有一个公共互联网地址,听起来你想让你的 Linux 机器变成一个路由器,可能还具有 NAT/Masquerade 功能。请参阅http://www.howtoforge.com/internet-connection-sharing-masquerading-on-linux这是众多例子中的一个。

你给出的 IPtables 很简单允许HTTP 流量到达后将通过您的 Linux 机器进行转发,但您需要确保您的客户端使用您的 Linux 机器作为网关来实现这一点。

相关内容