mac*_*akp 9 linux nat iptables hostapd
我的电脑配备了两个网络接口,wlan0
& eth0
,我想使用 WiFi 端口作为wlan0
.
hostapd
设施,它在本地网络内的路由模式下正常工作;用户可以连接到接入点并且 DHCP 在两个网段中都正常工作。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)
Run Code Online (Sandbox Code Playgroud)
如何iptables
在 PC 上为其配置简单的 NAT配置?
hostapd
(network 192.168.10.X
)连接到网络的用户都可以访问互联网我无法从 WiFi 网段连接到互联网:
192.168.10.48
,唯一的流量eth0
来自地址:
16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
Run Code Online (Sandbox Code Playgroud)
注意:地址192.168.0.48
不是192.168.10.48
,所以 Masquerade 接缝工作。192.168.0.1
[ADSL 路由器],以前可以。编辑 1:
systemctl
显示iptables
为:
iptables.service loaded active exited
Run Code Online (Sandbox Code Playgroud)
即使我跑了:
systemctl enable iptables.service
systemctl start iptables.service
Run Code Online (Sandbox Code Playgroud)编辑2:
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)
Run Code Online (Sandbox Code Playgroud)以最简单的形式:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
这将允许所有无线用户接入到互联网。
当然,假设您的其他路由设置已经完成,即:
在内核中启用转发
sysctl net.ipv4.ip_forward=1
Run Code Online (Sandbox Code Playgroud)转发启用iptables
:
iptables -P FORWARD ACCEPT
iptables -F FORWARD
Run Code Online (Sandbox Code Playgroud)用于在出现问题时tcpdump -nn -i eth0
监视流量eth0
以查看它是否正确地进行了 NAT,响应是否回来等。
编辑: “我每次启动计算机时都必须手动添加(从启动脚本)...”
这取决于您拥有的 Linux 发行版。遗憾的是,几乎每个发行版都有自己的防火墙工具——最后他们只是调用,iptables
但出于某种原因,作者认为混淆 iptables 的工作方式是用户想要的。
回答您的问题 - 您的防火墙很可能可以配置为自动添加此 NAT 规则。然而,Linux 发行版之间的确切方式无缘无故地不同。悲伤但真实。
小智 5
我为所有场合编写了防火墙。请在使用前阅读自述文件和脚本。我包括了 HOSTAP 的必要规则
基本部分:
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
Run Code Online (Sandbox Code Playgroud)
iptables -A INPUT -j ACCEPT >> /dev/null 2>&1
iptables -A OUTPUT -j ACCEPT >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
https://github.com/diveyez/fw.sh