有许多教程展示了如何使用 Raspberry Pi 4 设置 Wifi AP,所有教程都具有不同的配置。我正在尝试使用以下特定设置进行操作:
RPi4 充当 Wifi AP。它安装了Raspberry 版 Kali。它有一个
eth0
通过我的家用 Wifi 路由器连接到互联网的接口(我们称之为路由器HomeWifi
)。这个 RPi4 有一个我想用作 Wifi AP 接口接收来自其他设备的本地网络流量。所以,基本上,这个 RPi4 位于我和我想要连接到互联网的设备wlan0
之间。HomeWifi
一台 Debian 笔记本电脑位于 RPi4 后面,想要访问互联网。我们称此设备为
TestDevice
以下是我在 RPi4 上设置的各种配置:
1- 在/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.220.1/24
2- 在/etc/hostapd/hostapd.conf
:
interface=wlan0
driver=nl80211
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=0
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ssid=mypirouter
wpa_passphrase=password_for_mypirouter
3- 在/etc/init.d/hostapd
:
DAEMON_CONF=/etc/hostapd/hostapd.conf
4- 在/etc/dnsmasq.conf
:
resolve-file="/etc/resolv.dnsmasq"
server=1.1.1.1
interface=wlan0
bind-dynamic
dhcp-range=192.168.220.50,192.168.220.150,12h
dhc-option=option:router,192.168.1.1
log-queries
log-dhcp
5- 在/etc/resolv.conf
nameserver 127.0.0.1
关于我为什么这样做,这里有一个注释:我参考了NOTES
页面中的部分man dnsmasq
。它说
...in order to configure dnsmasq to act as cache for the host on which it is running, put "nameserver 127.0.0.1" in /etc/resolv.conf....
6在/etc/resolv.dnsmasq
nameserver 1.1.1.1
nameserver 8.8.8.8
7在/proc/sys/net/ipv4/ip_forward
1
8在/etc/sysctl.conf
:
net.ipv4.ip_forward=1
9- 以下是设置iptables
:
*nat
:PREROUTING ACCEPT [1:32]
:INPUT ACCEPT [1:32]
:OUTPUT ACCEPT [1:248]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [9023:800718]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8673:816768]
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
COMMIT
结果:
在 RPi4 上运行以下服务后:
sudo systemctl start hostapd
sudo systemctl start dnsmasq
我确认这两项服务都在 RPi4 上运行。
然后,在我的 上,我成功TestDevice
连接到了 SSID 。在 上运行显示它已分配 IP 为,完全在上述配置范围内。mypirouter
ifconfig
TestDevice
192.168.220.141
现在,当我尝试时ping www.google.com
,TestDevice
出现以下错误:
PING www.google.com 56(84) bytes of data
From TestDevice (192.168.220.141) icmp_seq=1 Destination Host Unreachable
From TestDevice (192.168.220.141) icmp_seq=2 Destination Host Unreachable
...
但是,如果我尝试通过其静态 IP ping RPi4
ping 192.168.220.1
我可以收到这样的回复:
PING 192.168.220.1 56(84) bytes of data
64 bytes from 192.168.220.1: icmp_seq=1 ttl=64 time=2.46 ms
64 bytes from 192.168.220.1: icmp_seq=2 ttl=64 time=2.84 ms
...
此时,我怀疑 出了问题iptables
。但我不确定如何修复它。任何建议都非常感谢。
答案1
在你的域名系统配置中,有以下行:
dhc-option=option:router,192.168.1.1
…还有以下用于 DHCP 客户端的 IP 池:
dhcp-range=192.168.220.50,192.168.220.150,12h
与往常一样255.255.255.0子网掩码,这意味着192.168.1.1位于另一个子网中。但这还不是最糟糕的;它实际上也不是“在线”的。相反,该路由器位于单独的网络段中,无法直接访问。
如果你直接删除这个选项,域名系统仍会发送,但会自行找出要发送的地址。这在大多数情况下都有效,如果域名系统在默认网关本身上运行。
如果你实际上不想与接入点创建不同的网段,你也可以桥接 Wi-Fi AP 接口和有线接口,从而无需域名系统以及任何iptables设置完毕。