题 两个接口之间的iptables转发


所以我有一个带有两个无线接口的linux盒子,一个是电台,另一个是AP。

wlan0(站) - 连接到互联网连接

wlan1(AP) - 其他客户端连接到它。

我希望连接到wlan1的客户能够访问wlan0上的互联网。我想用iptables做这个,因为我的内核没有桥接支持......

这是我到目前为止尝试使用iptables但它不起作用:

iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

我很感激任何帮助。


16
2017-09-25 01:08




IPTABLES是一个有状态数据包过滤器,它允许/丢弃/修改数据包。它不是路由器或桥接器。您的命令会调整防火墙以允许通信,但它们不会执行任何操作来实际转发它。 - Zoredache
因此,将内核替换为具有所需功能的内核。毕竟它是“一个Linux盒子”。 - Michael Hampton♦
啊谢谢你的澄清! - broody
我可以实现我想要的'路线'吗?我将考虑使用桥接支持重建内核,但想知道是否还有其他选项。 - broody
Route会在启用后告诉它去哪里。迈克尔告诉你需要做些什么来支持路由。然后你需要通过sysctl打开它。 - Magellan


答案:


首先,要使在私有接口上连接的主机能够连接到互联网,您不需要桥接接口,您需要将进入一个接口的数据包路由到另一个接口上的数据包,然后将它们发送到外部。

要做到这一点,你只需要:

  1. 在你的linux盒子上启用转发:
  2. 允许特定(或全部)数据包遍历您的路由器
  3. 正如有人所说,由于netfilter是无状态防火墙,因此允许已建立连接的流量
  4. 更改发往互联网的数据包的源地址
    echo 1> / proc / sys / net / ipv4 / ip_forward
    iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
    iptables -A FORWARD -i wlan0 -o wlan1 -m state --state ESTABLISHED,RELATED \
             -j接受
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

应该这样做。


23
2017-09-25 02:18



我想你可能意味着: echo 1 >/proc/sys/net/ipv4/ip_forward 为第一行 - Jason Tan
就是这样......不知道那条线的最后一部分发生了什么......纠正了。 - Torian
我认为您还必须将客户端设置为使用Linux机箱作为其网关。 - Jason Tan
并且要通过重新启动来保持转发,你想要这样做:'echo“net.ipv4.ip_forward = 1”>> /etc/sysctl.conf' - Jason Tan
@StudentsTea是的,你这样做,除非你的 iptables“ FORWARD table设置为全局接受策略。你还需要 nat 表格规则无论如何。 - Thomas Ward