我有一台带有局域网接口 (eth0) 和广域网接口 (wlan0) 的 raspberry pi 2 - usb wifi 适配器。我的操作系统是 raspbian。我想将我的 raspberry 用作 wifi AP。因此,有必要在我的 wlan0 上运行 ics-dhcp-server。
我想要一个共享的本地网络,这样 PC 和 Wi-Fi 客户端就可以互相看到。因此:
- PC 通过有线连接连接到路由器 (192.168.254.4) 局域网,其静态 IP 范围为 192.168.254.1 - 192.168.254.99(192.168.254.4 除外)。Raspberry Pi 局域网 IP 为 192.168.254.97。
- Wi-FI 客户端已连接到我的树莓派,其 IP 范围应为 192.168.254.201 - 192.168.254.250。树莓派 wlan IP 为 192.168.254.200。
互联网使用 MASQERADE 从 LAN 连接到 WLAN。
我的配置是:
猫/etc/dhcp/dhcpd.conf:
subnet 192.168.254.0 netmask 255.255.255.0 {
interface wlan0;
range 192.168.254.201 192.168.254.250;
option broadcast-address 192.168.254.255;
option routers 192.168.254.200;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4, 64.6.64.6, 64.6.65.6;
host wlan0 {
fixed-address 192.168.254.200;
}
}
猫/etc/default/isc-dhcp 服务器:
INTERFACESv4="wlan0"
猫/etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.254.201,192.168.254.250,255.255.255.0,24h
猫/etc/dhcpcd.conf
interface eth0
static ip_address=192.168.254.97
static routers=192.168.254.4
# 192.168.254.4
static domain_name_servers=192.168.254.4
static domain_search=
interface wlan0
static ip_address=192.168.254.200/24
nohook wpa_supplicant
static routers=
static domain_name_servers=
static domain_search=
使用此配置时我尝试启动 isc-dhcp-server 时出现错误:
Multiple interfaces match the same subnet: eth0 wlan0
Multiple interfaces match the same shared network: eth0 wlan0
Can't bind to dhcp address: Address already in use
我的配置哪里有错误?
答案1
第一个错误是同一个子网中有多个接口。第二个错误是你是沉重混淆路由器的功能(伪装、提供 DHCP)以及接入点的作用(允许访问同一子网)。从某种意义上说,它们实际上做相反的事情。
路由器连接两个所有的网络。它不连接同一网络的两个部分——毕竟,如果主机“位于同一子网中”,那么字面上地意味着无需通过路由器即可访问。
因此,如果您想将 Raspberry Pi 用作路由器(带或不带 MASQUERADE),那么两个接口必须使用不同的网络号 - 两边不能相同为 192.168.254.0/24。
但你说“我想要一个共享的本地网络”,所以你不实际上想将您的 Raspberry Pi 用作路由器 – 您想将其用作接入点。
接入点是不是路由器,它是一座桥梁。接入点不需要提供 DHCP,因为它只是将 DHCP 请求转发到您已有的上一个路由器。它也不需要“伪装”任何东西,因为它只处理单个网络。
如果您希望 Wi-Fi 和以太网都位于 AP 的单个子网中,则必须明确桥接一起。一旦桥接,eth0 和 wlan0 将不再拥有自己的 IP 地址 - 只有桥接器本身“br0”才需要地址。
(接入点能提供 DHCP – 但前提是主路由器不支持。请记住,您需要一个共享网络,并且需要只有一个整个网络的 DHCP 服务器。)
因此,如果你想设置 AP,目前有关于“raspbian bridge”的文章,具体如下:https://www.raspberrypi.org/documentation/configuration/wireless/access-point-bridged.md也可在 Raspbian 上运行。
(但不是 https://www.raspberrypi.org/forums/viewtopic.php?t=132674– 这在谷歌搜索结果中排名很高,但它实际上告诉你如何设置路由器,不是桥梁。请忽略该页面。)
但简而言之,你应该做的是:
删除“MASQUERADE”防火墙规则(它仅适用于路由器,而不适用于网桥);
消除两个都来自 dhcpcd.conf 的“接口 eth0”和“接口 wlan0”;
配置
/etc/systemd/network/br0.netdev
通过systemd-networkd创建网桥:[NetDev] Name=br0 Kind=bridge
别忘了
systemctl enable systemd-networkd
。类似地,配置 systemd-networkd 以将 eth0 设置为 br0 的成员。(只有 eth0 - hostapd 本身将处理 wlan0。)
通过 systemd-networkd 或 dhcpcd(无所谓)为 br0 分配一个 IP 地址。
告诉 hostapd 将 wlan0 也放入网桥中:
interface=wlan0 bridge=br0
(这必须通过 hostapd 完成,因为 wlan0 只有在实际切换到“接入点”模式时才可桥接。)
答案2
感谢你的回答。
我已经完成以下步骤:
删除了防火墙规则 MASQUERADE
从中删除接口 eth0 和 wlan0/etc/dhcpcd.conf
创建/etc/systemd/network/br0.netdev和:
[NetDev]
名称=br0
种类=桥梁
创建/etc/systemd/network/br0-slave.network和:
[匹配]
名称 =eth0
[网络]
桥=br0
创建/etc/systemd/network/br0.network和:
[匹配] 名称=br0
[网络]
地址=192.168.254.106/24
网关=192.168.254.4
DNS=192.168.254.4
我的/etc/hostapd/hostapd.conf现在是:
接口=wlan0
#国家=RU
桥=br0
驱动程序=nl80211
#驱动程序=ath9k_htc
#驱动程序=mt7601u
ssid=某个名称
硬件模式=g
频道=7
wmm_enabled=0
macaddr_acl=0
身份验证=1
忽略广播 SSID = 0
wpa=2
wpa_passphrase=somepass
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
logger_syslog=-1
此外,我还在我的/etc/rc.local,所以现在是:
rfkill 解锁 wifi
杀死wpa_supplicant
出口 0
然后重新启动。现在我有一个可以上网的 AP,但是当我尝试使用 Raspberry 连接到任何服务器/站点时,没有连接(无法执行 apt-get install ... 或 ping google.com - 主机无法访问)。此外,我可以在 eth0 上看到旧 ip 地址(192.168.254.105),尽管它已在 /etc/dhcpcd.conf 中注释。我还能在哪里找到旧的 eth0 ip 地址并将其删除?