如何为hostapd使用NAT iptables规则


9

我的PC配备了两个网络接口wlan0eth0,我想将WiFi端口用作上的访问点wlan0

  • 我使用了hostapd工具,它在本地网络中的路由模式下正常工作;用户可以连接到接入点,并且DHCP在这两个网段中均可以正常工作。
  • PC hostapd没有任何防火墙或iptables规则(iptables并且禁用了防火墙),因为我只想使用ADSL路由器的内置防火墙。

我的网络配置如下:

  • PC with hostapd -> cable connection -> ADSL router
  • wlan0 -> eth0 <-> 192.168.0.1 <-> internet
  • 192.168.10.1 -> 192.168.0.7 -> static routing to 192.168.10.X

电脑ifconfig

eth0  Link encap:Ethernet  HWaddr 00:12:3F:F2:31:65
      inet addr:192.168.0.7  Bcast:192.168.0.255  Mask:255.255.255.0
      inet6 addr: fe80::212:3fff:fef2:3165/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:2169539 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1008097 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:3056198487 (2.8 GiB)  TX bytes:72727161 (69.3 MiB)
      Interrupt:16

lo    Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3398 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:495444 (483.8 KiB)  TX bytes:495444 (483.8 KiB)

mon.wlan0  Link encap:UNSPEC  HWaddr 00-14-A5-04-94-3C-90-F0-00-00-00-00-00-00-00-00
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:151 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:17092 (16.6 KiB)  TX bytes:0 (0.0 b)

wlan0 Link encap:Ethernet  HWaddr 00:14:A5:04:94:3C
      inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
      inet6 addr: fe80::214:a5ff:fe04:943c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1502 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:0 (0.0 b)  TX bytes:279392 (272.8 KiB)

如何iptables在PC上为其配置简单的NAT 配置?

  • 我希望所有通过hostapd(network 192.168.10.X)连接到网络的用户都可以访问Internet或从Internet访问
  • 我不想过滤任何流量,仅过滤NAT。

我无法从WiFi网段连接到互联网:

  • 连接到WiFi的客户端具有DHCP地址192.168.10.48,并且唯一的流量eth0来自该地址:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    注意:该地址192.168.0.48不是192.168.10.48,因此假面舞会接缝正常工作。
  • 我再也无法ping通192.168.0.1[ADSL路由器]。
  • 从互联网访问WIFI用户怎么样?当然,我将在ADSL路由器中进行设置,将特定IP端口池从Internet转发到该WiFi用户的特定IP地址。

编辑1:

  • systemctl显示iptables为:
    iptables.service          loaded active exited
    
    即使我跑了:
    systemctl enable iptables.service
    systemctl start iptables.service
    

编辑2:

  • 它可以工作,但是每次我启动计算机时,必须通过启动脚本手动添加以下内容是否正常?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

请在下面查看我的最新回复...
MLu

Answers:


6

最简单的形式:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这将允许所有无线用户接入互联网。

当然,假设您的其他路由设置已经完成,即:

  1. 在内核中启用转发

    sysctl net.ipv4.ip_forward=1
    
  2. 已在中启用转发iptables

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

用于在出现问题时tcpdump -nn -i eth0观察流量,eth0以查看是否正确进行了NAT,响应是否返回等。

编辑: “我每次从启动脚本启动计算机时都必须手动添加...” 这取决于您拥有的Linux发行版。令人遗憾的是,每个发行版几乎都有其自己的防火墙工具-最终他们只在调用它,iptables但由于某些原因,作者认为混淆iptables的工作方式是用户想要的。

要回答您的问题-您的防火墙很可能可以配置为自动添加此NAT规则。但是,确切的方式在Linux发行版之间并不存在充分的理由。悲伤但真实。


PC上的所有防火墙均已禁用。唯一正在运行的服务是iptables
mackowiakp 2013年

iptables ==防火墙-您需要以某种方式配置iptables以发出该MASQUERADE规则。怎么样?这取决于您的linux发行版。某处必须有配置文件。哪里?这取决于您的linux发行版。
MLu

因此,您有mu iptables统治:
mackowiakp

因此,您有以下iptables规则:[root @ media〜]#iptables -L链输入(策略接受)目标保护源目标链链(策略接受)目标保护源目标链链输出(策略接受)目标保护源目标。我和这样的启动行:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE。因此,我对iptables的实现实际上是“透明”防火墙-或无防火墙
-mackowiakp

5

我为所有场合编写了防火墙。使用前请先阅读自述文件和脚本。我包括了HOSTAP的必要规则

基本零件:

主机AP

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

HostAP要求以下各行均能正常运行

iptables -A INPUT -j ACCEPT >> /dev/null 2>&1 
iptables -A OUTPUT -j ACCEPT >> /dev/null 2>&1

https://github.com/diveyez/fw.sh

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.