iptables在两个接口之间转发


26

因此,我有一个带有两个无线接口的linux盒,一个是工作站,另一个是AP。

wlan0(站)-已连接到Internet连接

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

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

到目前为止,这是我尝试使用iptables进行的操作,但无法正常工作:

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

我将不胜感激。


1
IPTABLES是一个有状态的数据包筛选器,它允许/丢弃/破坏数据包。它不是路由器或网桥。您的命令调整了防火墙以允许通信,但是它们实际上并没有采取任何措施。
Zoredache 2012年

因此,用具有所需功能的内核替换内核。毕竟,它是一个“ Linux盒子”。
迈克尔·汉普顿

我可以实现“路线”功能吗?我还将研究通过桥支持重建内核,但想知道是否还有其他选择。
broody 2012年

启用后,Route会告诉它去哪里。Michael告诉您需要做些什么来支持路由。然后,您需要通过sysctl将其打开。
麦哲伦2012年

Answers:


35

首先,要使连接在您专用接口上的主机能够出站到Internet,您不需要桥接接口,您需要将进入一个接口的数据包路由到另一个接口,然后它们在野外传播。

为此,您只需要:

  1. 在Linux机器上启用转发:
  2. 允许特定(或所有)数据包遍历您的路由器
  3. 就像有人说的那样,由于netfilter是无状态防火墙,因此允许已建立连接的流量通过
  4. 更改发送到互联网的数据包的源地址
    回声1> / proc / sys / net / ipv4 / ip_forward
    iptables -A FORWARD -i wlan1 -o wlan0 -j接受
    iptables -A FORWARD -i wlan0 -o wlan1 -m state --state已建立,相关\
             -j接受
    iptables -t nat -A写信-o wlan0 -j伪装

那应该做。


我想您可能是说:echo 1 >/proc/sys/net/ipv4/ip_forward第一行
Jason Tan

就这样...不知道该行最后一部分发生了什么...已更正。
Torian 2012年

我认为您还必须将客户端设置为使用linux box作为其网关。
贾森·谭

为了使转发在重新启动后持续进行,您需要执行以下操作:'echo“ net.ipv4.ip_forward = 1” >> /etc/sysctl.conf'–
Jason Tan

1
@StudentsTea是的,您可以这样做,除非将您的iptables' FORWARD表设置为全局接受策略。nat无论哪种方式,您仍然需要表规则。
托马斯·沃德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.