我有一个连接到 WiFi 路由器的有线调制解调器。我已将路由器配置为提供 DHCP。由于我家的布局,我无法将家用有线 LAN 物理连接到路由器。我希望使用带有 WiFi 适配器和以太网的 Raspberry Pi 作为有线网络、无线网络和路由器之间的桥梁。
一些目标:
- 无线和有线设备可以相互连接。
- 无线和有线设备都可以看到互联网。
- 所有设备都通过路由器的 DHCP 获取其 IP 地址。
- 重启后会自动出现正确的配置。
我的基本问题是,我该如何配置我的设备来实现这些目标?
我在 Raspberry Pi 上安装并运行了 bridge-utils。如果我在 /etc/network/interfaces 中启用桥接,那么 Raspberry Pi 会徒劳地寻找 DHCP 服务器,并且无法获得 IP 地址。如果我禁用桥接,那么 Raspberry Pi 会毫无困难地从路由器获得 DHCP 响应,获得 IP 地址,并可以访问互联网。
有线 LAN 上还有一台 Synology DiskStation,它可以提供 DHCP,因此如果有帮助的话,我很乐意启用它。但是那样的话,我就有两个 DHCP 服务器,因此我可能需要两个子网以及它们之间的一些路由。如果可能的话,我希望让事情变得更简单。
这是我的 /etc/network/interfaces 文件:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "MySSID"
wps-psk "MyPassword"
auto br0
iface br0 inet manual
pre-up iwconfig wlan0 essid "MySSID"
bridge_hw 12:34:56:78:90:ab
bridge_ports wlan0 eth0
bridge_stp off
bridge_maxwait 5
bridge_fd 0
bridge_hw 行包含 Raspberry Pi 上 WiFi 适配器的 MAC 地址。我还尝试了类似这样的 br0 节(发现这里),但它也不起作用:
auto br0
iface br0 inet dhcp
pre-up ip link set eth0 down
pre-up ip link set wlan0 down
pre-up brctl addbr br0
pre-up brctl addif br0 eth0 wlan0
pre-up ip addr flush dev eth0
pre-up ip addr flush dev wlan0
我在 /etc/sysctl.conf 中启用了 net.ipv4.ip_forward,但似乎没有帮助。我查看了系统日志,但没有发现任何明显的问题。
我读了很多关于桥接,DHCP,已删除,dhcre中继,/etc/网络/接口和系统配置,但我不清楚如何配置我的系统,以便 wlan0 首先在 Raspberry Pi 上启动,从路由器获取 DHCP 信息,然后网桥启动,然后 eth0 在 Raspberry Pi 上启动,通过网桥获取其 DHCP,然后其他有线设备也可以,无线设备可以看到有线设备。如果这有帮助的话,我很乐意在 Raspberry Pi 上切换到静态 IP。
答案1
你不能轻易桥接 wifi 接口,请参阅这里以获得更好的解释。有很多方法可以解决这个问题(例如,VirtualBox 开箱即用),我将向您展示一种方法。
如果您无法桥接wlan0
,eth0
则可以通过 来在它们之间中继 IP 流量ip_forward
,但这会遗漏两种重要的流量,即 DHCP(使用原始套接字)和 ARP(这是第 2 层协议,因此不在 ip-forward 的范围内)。我们通过设置自己的 DHCP 服务器来解决第一个问题,该服务器eth0
仅在接口上应答查询;要使它正常工作,我们必须确保您的路由器和 RPi 上的 dnmasq 分配的 IP 地址范围不是重叠。我们通过启用代理arp。
最简单的方法是忽略parprouted
和dhcrelay
,但这会带来不必要的麻烦。我们将改用proxy-arp
。
选择您的路由器所处的 LAN 中的子网不是用于分配 IP 地址,例如
192.168.1.160/27
,并将其第一个地址分配192.168.1.161
给您的eth0
接口:ip addr add 192.168.1.161/32 dev eth0
告诉内核可以在
eth0
接口上找到这个子网:ip route add 192.168.1.160/27 dev eth0
启用代理arp和ip_forwarding:
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp echo 1 > /proc/sys/net/ipv4/ip_forward
下载并安装 dnsmasq 以在 eth0 接口上执行 DHCP:
apt-get install dnsmasq
然后创建一个文件,
/etc/dnsmasq.conf
内容如下:domain-needed bogus-priv dhcp-authoritative interface=eth0 local=/YourDomainName.lan/ server=8.8.8.8 server=8.8.4.4 expand-hosts domain=YourDomainName.lan dhcp-range=192.168.1.162,192.168.1.190,12h
重新启动
dnsmasq
,您就完成了。
在启动时启动上述所有内容应该很简单,如果不是,请告诉我。