我的 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 转发。
话虽如此,您希望您的主机成为网关,但更具体地说,仅限于协议HTTP
和HTTPS
(80/443)。 要实现这一点,您应该:
- 能够在这两个接口之间转发流量
- 转发目标端口为 80 的数据包 (HTTP)
- 转发目标端口为 443 的数据包 (HTTPS)
- 因为
iptables
(netfilter
)是stateless packet filtering system
,所以接受返回的数据包 - 源 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 机器作为网关来实现这一点。