我有一个带有 lan 接口 (eth0) 和 wan 接口 (wlan0)-usb wifi 适配器的树莓派 2。我的操作系统是树莓派。我想将我的树莓派用作 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 除外)。树莓派 LAN 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-server:
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
我的配置中的错误在哪里?
第一个错误是在同一个子网中有多个接口。第二个错误是您严重混淆了路由器的功能(伪装、服务 DHCP)和接入点的功能(允许访问同一子网)。从某种意义上说,他们实际上做了相反的事情。
路由器连接两个完整的网络。它不会连接同一网络的两半——毕竟,如果主机“在同一个子网中”,这实际上意味着它可以在不通过路由器的情况下访问。
所以如果你想将树莓派用作路由器(有或没有 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 - 这在 Google 结果中排名很高,但它实际上告诉您如何设置路由器,而不是网桥。忽略该页面。 )
但简而言之,你应该做的是:
删除“MASQUERADE”防火墙规则(它只适用于路由器,不适用于网桥);
从dhcpcd.conf中删除“interface eth0”和“interface wlan0”;
配置
/etc/systemd/network/br0.netdev
通过 systemd-networkd 创建网桥:别忘了
systemctl enable systemd-networkd
。同样,配置 systemd-networkd 将 eth0 设置为 br0 的成员。(只有 eth0 – hostapd 本身会处理 wlan0。)
通过 systemd-networkd 或 dhcpcd(没关系)为 br0 分配一个 IP 地址。
告诉 hostapd 也将 wlan0 放入网桥:
(这必须通过 hostapd 来完成,因为 wlan0 只有在实际切换到“接入点”模式时才可桥接。)
感谢你的回答。
我已经完成了以下步骤:
删除防火墙规则 MASQUERADE
从/etc/dhcpcd.conf中删除了接口 eth0 和 wlan0
创建/etc/systemd/network/br0.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
#国家=俄罗斯
桥=br0
司机=nl80211
#driver=ath9k_htc
#驱动程序=mt7601u
ssid=某个名字
hw_mode=g
频道=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=somepass
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
logger_syslog=-1
我还在我的/etc/rc.local中添加了一个“killall wpa_supplicant” ,所以现在是:
rfkill 解锁 wifi
killall wpa_supplicant
出口 0
并重新启动。现在我有一个可以使用互联网的 AP,但是当我尝试使用我的 Raspberry 连接到任何服务器/站点时,没有连接(无法执行 apt-get install ... 或 ping google.com - 主机无法访问) . 我也可以在我的 eth0 (192.168.254.105) 上看到旧的 IP 地址,尽管它在我的 /etc/dhcpcd.conf 中有注释。我还能在哪里找到我的旧 eth0 ip 地址来删除它?