设置 Raspbian 网桥时出现问题

设置 Raspbian 网桥时出现问题

我正在尝试将树莓派设置为无线接入点和路由器之间的网桥(原因是我想将设备连接到 AP 并tc在 pi 上使用来模拟较差的网络)。路由器连接到 pi at eth0,AP 连接到 pi at eth1(USB 转以太网适配器)。

我正在使用dhcpcddnsmasq尝试实现这一点。但是,即使我可以将设备连接到 AP 并且为其提供了 IP 地址(在 中指定的范围内dhcpcd.conf),所有 ping(无论是域还是 IP 地址)都会超时(当我什至无法 ping pi 时)连接到 AP)。

我已启用 ipv4 转发/etc/sysctl.conf
net.ipv4.ip_forward=1

dhcpcd.conf我添加了默认值:

# eth1 is connected to the AP
interface eth1
# This is the ip address of the Raspberry Pi
static ip_address=10.0.0.100/24
# This is the ip address of the router
static routers=10.0.0.1

我的dnsmasq.conf看起来像这样(我不完全确定接口是否正确,我已将其设置为连接到 AP 的接口,但将其更改为eth0似乎没有任何区别):

interface=eth1
listen-address=10.0.0.100
bind-interfaces
server=8.8.8.8
server=8.8.4.4
domain-needed
bogus-priv
dhcp-range=10.0.0.110,10.0.0.130,4h

我运行这些命令来添加 iptable 规则(然后我将 iptables 保存到文件中,并通过 启动时恢复它们rc.local):

sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

根据我的阅读,上面的规则应该可以通过 pi 正确转发流量,但情况似乎并非如此。

dhcpcd我检查了和服务的状态dnsmasq,但没有看到任何看起来像错误的内容。

dhcpcd地位:

● dhcpcd.service - dhcpcd on all interfaces
   Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/dhcpcd.service.d
           └─wait.conf
   Active: active (running) since Tue 2019-02-26 12:02:43 GMT; 29min ago
 Main PID: 368 (dhcpcd)
   CGroup: /system.slice/dhcpcd.service
           └─368 /sbin/dhcpcd -q -w

Feb 26 12:02:43 raspberrypi dhcpcd[368]: eth0: offered 10.0.0.140 from 10.0.0.1
Feb 26 12:02:43 raspberrypi dhcpcd[368]: eth0: probing address 10.0.0.140/24
Feb 26 12:02:47 raspberrypi dhcpcd[368]: eth0: using IPv4LL address 169.254.202.179
Feb 26 12:02:47 raspberrypi dhcpcd[368]: eth0: adding route to 169.254.0.0/16
Feb 26 12:02:48 raspberrypi dhcpcd[368]: eth0: leased 10.0.0.140 for 86400 seconds
Feb 26 12:02:48 raspberrypi dhcpcd[368]: eth0: adding route to 10.0.0.0/24
Feb 26 12:02:48 raspberrypi dhcpcd[368]: eth0: adding default route via 10.0.0.1
Feb 26 12:02:49 raspberrypi dhcpcd[368]: eth0: deleting route to 169.254.0.0/16
Feb 26 12:02:50 raspberrypi dhcpcd[368]: eth0: no IPv6 Routers available
Feb 26 12:02:50 raspberrypi dhcpcd[368]: eth1: no IPv6 Routers available

dnsmasq地位:

● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
   Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-02-26 12:02:43 GMT; 33min ago
 Main PID: 401 (dnsmasq)
   CGroup: /system.slice/dnsmasq.service
           └─401 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -r /run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,19036,8,2,49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5 --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d0

Feb 26 12:02:50 raspberrypi dnsmasq-dhcp[401]: DHCPDISCOVER(eth1) a0:f3:c1:6d:2f:1b
Feb 26 12:02:50 raspberrypi dnsmasq-dhcp[401]: DHCPOFFER(eth1) 10.0.0.129 a0:f3:c1:6d:2f:1b
Feb 26 12:02:50 raspberrypi dnsmasq-dhcp[401]: DHCPDISCOVER(eth1) a0:f3:c1:6d:2f:1b
Feb 26 12:02:50 raspberrypi dnsmasq-dhcp[401]: DHCPOFFER(eth1) 10.0.0.129 a0:f3:c1:6d:2f:1b
Feb 26 12:02:58 raspberrypi dnsmasq-dhcp[401]: DHCPDISCOVER(eth1) a0:f3:c1:6d:2f:1b
Feb 26 12:02:58 raspberrypi dnsmasq-dhcp[401]: DHCPOFFER(eth1) 10.0.0.129 a0:f3:c1:6d:2f:1b
Feb 26 12:02:58 raspberrypi dnsmasq-dhcp[401]: DHCPREQUEST(eth1) 10.0.0.129 a0:f3:c1:6d:2f:1b
Feb 26 12:02:58 raspberrypi dnsmasq-dhcp[401]: DHCPACK(eth1) 10.0.0.129 a0:f3:c1:6d:2f:1b TL-WR702N
Feb 26 12:35:05 raspberrypi dnsmasq-dhcp[401]: DHCPREQUEST(eth1) 10.0.0.124 f4:5c:89:8e:aa:a1
Feb 26 12:35:05 raspberrypi dnsmasq-dhcp[401]: DHCPACK(eth1) 10.0.0.124 f4:5c:89:8e:aa:a1 george

在此状态下,TL-WR702N是AP,george是与AP 连接的设备。

我很困惑我哪里出错了。我正在关注教程用于将 pi 设置为桥接器,并尝试通过参考 的手册页来调试此问题dnsmasqdhcpcdiptables无济于事。

圆周率自设置后已重新启动。

答案1

查看链接的教程后(https://pimylifeup.com/raspberry-pi-wifi-bridge/),我可以得出这样的结论:不是桥接教程,而是 NAT/路由器教程。甚至其中的评论也指出:

另外,需要注意的是,此设置是一个 wifi 客户端 NAT 路由器,从技术上讲不是一个桥接器。

因此,要实际使用桥,请遵循桥教程。既然是 Raspbian,Debian 的桥接网络连接应该足够好了。提到的bridge-utils包并不是真正需要的(已过时)brctl可以完全被现代命令取代ip路由2ip link和(如果确实需要)bridge,但对于其bridge-utils-interfaces插件如果向上向下配置

因此最终可以使用类似以下内容来完成配置:

iface eth0 inet manual

iface eth1 inet manual

auto br0
iface br0 inet dhcp
    bridge_ports eth0 eth1

不要在真实接口上放置任何 IP,因为它们现在成为桥接端口,并且它们的第 3 层设置将被忽略。同样不重要,但网桥应继承其第一个接口的 MAC 地址。因此,如果它确实很重要并且您希望使用 eth1 的 MAC,请将其放在命令的前面bridge_ports(这也可能会更改路由器的 DHCP 提供)。

现在将eth0各种设置中的任何引用更改为将接口声明为br0,但很可能您甚至不需要它,因为例如您不再需要dnsmasq.就是这样。

一些额外的信息:

  • 如果您曾经使用过iptables替代或补充ebtables尝试在两个接口之间进行过滤(提示:您可能不应该,它现在是一个网桥,而不是路由器,但它是状态透明防火墙网桥所需要的),请注意,如果激活br-netfilter桥接过滤和 IP 过滤层之间的特殊交互:基于 Linux 的桥上的 ebtables/iptables 交互。当不了解这一点时,这可能会导致难以调试的结果。

  • 许多tc qdisc效果(如netem)仅适用于传出方向(出口)。由于您处于两个接口eth0和之间eth1,您可能会想,您总是可以找到用于特定预期操作的出口接口,但如果完成,eth0那么 RPi 本身可能会在互联网端受到影响,这可能不是我们所希望的。您可以通过附加一个来避免这种情况中间功能块设备( ifb0) 到eth1:这会人为地在入口和网络代码的其余部分之间插入一个接口。因此,从传入数据流的角度来看,该接口现在是一个出口接口eth1,并且可以愉快地接受诸如netem.对于任何其他解释,它都是入口流的一部分。您现在可以将 TC 应用到eth1ifb0并不受干扰地离开eth0。我的回答中有更多信息:使用netem模拟桥接接口上的丢包

相关内容