现状
Raspbian Stretch 通过 wlan0(型号 RT5370)无线连接到私有子网 10.0.0.0/16。无需进一步修改,Raspbian Stretch 即可访问互联网,DNS 也可以正常工作。PS:我无法物理访问连接到互联网的路由器 - 只能无线访问。
我添加了另一个 RT5370 NIC 作为 wlan1,并使用 hostapd 将其设置为无线接入点。
因为我不知道路由器的DHCP服务器地址范围,所以我不想给wlan0添加静态地址。
我已经在 wlan1 192.168.0.1/28(16 个主机地址)上配置了一个静态 IPv4 地址,并且我将 dnsmasq 设置为该网络的 DHCP 服务器。
问题
它确实应该非常简单。
Raspbian Stretch 可以 1) 访问互联网或 2) 充当 WAP 来连接客户端。问题是这两个功能不能同时工作。
我看过一些指南,其中互联网连接是通过铜线而不是无线电波建立的,但我不明白如果互联网连接接口是无线的而不是有线的,那有什么区别。无论如何...
我尝试过的方法
全新重启后,我可以成功 ping google.com 和 8.8.8.8。
检查后,我可以看到 wlan0 和 wlan1 ifconfig
,它们似乎设置正常。
这是 的输出route
。
Kernel IP routing table
Destination Gateway Genbask Flags Metric Ref Use Iface
default 10.0.0.36 0.0.0.0 UG 303 0 0 wlan0
default 192.168.0.1 0.0.0.0 UG 304 0 0 wlan1
10.0.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.240 U 303 0 0 wlan1
我不知道为什么这里看起来像有两个默认网关,而单个默认路由似乎更合适,但互联网可以工作,所以我继续......
在证明 Raspbian Stretch 可以访问互联网后,我尝试:
root@computer:/# hostapd /etc/hostapd/hostapd.conf
并得到这个:
Configuration file: /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan1 disabled_11b_rates=0
nl80211: driver initialization failed.
wlan1: interface state UNINITIALIZED->DISABLED
wlan1: AP-DISABLED
hostapd_free_hapd_data: Interface wlan1 wasn't started
现在,有趣的是,在我这样做之后:
root@computer:/# killall wpa_supplicant
root@computer:/# hostapd /etc/hostapd/hostapd.conf &
我明白了:
Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan1 with hwaddress aa:bb:cc:11:22:33 and ssid "myssid"
wlan1: interface state UNINITIALIZED->ENABLED
wlan1: AP-ENABLED
这使得我能够通过 wlan1 成功地将客户端机器连接到 myssid,但现在我无法 ping google.com 或 8.8.8.8,并且我注意到 wlan0 没有显示在 ifconfig 中,我的路由表现在如下所示:
Kernel IP routing table
Destination Gateway Genbask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.240 U 303 0 0 wlan1
为了恢复 wlan0,我执行以下操作:
root@computer:/# service dhcpcd restart
root@computer:/# sysctl daemon-reload
现在 wlan0 和 wlan1 显示在 ifconfig 中,Raspbian Stretch 可以 ping google.com 和 8.8.8.8,但连接到 wlan1 的客户端无法访问 Internet。
此时我的路由表如下所示:
Kernel IP routing table
Destination Gateway Genbask Flags Metric Ref Use Iface
default 10.0.0.36 0.0.0.0 UG 303 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.240 U 304 0 0 wlan1
如果我能允许 wlan1 客户端访问互联网,这一切就都结束了:)
答案1
由于从 Internet 网关路由器到连接到 wlan1 (192.168.0.0/28) 的网络没有路由,所以我最终只能在 wlan0 和 wlan1 之间设置具有 PAT 过载的动态 NAT。
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
任务完成!
如果我可以访问 Internet 网关路由器,我可能会添加从 Raspbian Stretch 的 wlan0 地址到 192.168.0.0/28 网络的静态路由,但 1) 我无法访问该路由器,2) 我还必须设置 - a) DHCP 服务器上的 DHCP 保留(我也没有访问权限)或 b) Raspbian Stretch 的 wlan0 上的静态 IP 地址 - 如果我想避免在 wlan0 dhcp 权限到期时进行更改。因此,在这种情况下静态路由不起作用。
无论如何,这是我见过或听说过的第一个可以正常工作的路由器/防火墙不是使用有线连接 WAN或者局域网。
人们完全可以在开放的免费 WiFi 网络上使用它,而不必使用 VPN 或 SOCKS 代理(如果您对 iptables 有足够的了解来保护您的连接)。