我正在设置运行 Raspbian 的 Raspberry Pi,作为我大学的无线网络(需要 WPA2 企业身份验证)和我的私人无线路由器(通过其 WAN 端口)之间的桥梁。
我在这里得到了一些惊人的帮助: 我怎样才能最简单地透明地桥接 wlan0 和 eth0 之间的流量?
在大多数情况下,我的设置现在可以按预期工作。唯一的问题是,如果我在 Raspberry Pi 上将 eth0 设置为 auto 或允许热插拔(正如我想做的那样,以便一切在启动时无头显示),似乎所有互联网流量都通过 eth0 路由。这是不正确的;我的互联网连接位于 wlan0,并且 eth0 将该连接共享到我的私人路由器。
我可以通过不让 eth0 自动出现来解决这个问题。如果我将 eth0 的 auto 或 allowed-hotplug 保留在 /etc/network/interfaces 之外,允许 Raspberry Pi 启动,然后手动运行“ifup eth0”,我会得到预期的行为。
有没有办法确保在启动时启动 eth0 之前已完全启动 wlan0(即使 eth0 是启动速度更快的接口)?或者,如果做不到这一点,我如何强制互联网流量(请注意,这来自 eth0)仅通过 wlan0?
编辑:目前,作为一种解决方法,我正在运行一个脚本来在启动时启动 eth0,并延迟三十秒以允许 wlan0 首先启动。这个解决方案既不优雅也不可靠(如果 wlan0 身份验证需要超过 30 秒怎么办?),但目前看来它确实能解决问题。不过,我仍在寻找更好的解决方案!
答案1
嗯..只是一个想法。但是,我确实假设您在 Wi-Fi 网络上使用 DHCP。因此,在网络完全启动之前,您不会拥有 IP 地址。
那么,让我们来一个 while 循环吧。
while [ "$(ifconfig wlan0 | grep inet | grep 192.168.)" = "" ]; do sleep 1; done
192.168。应替换为您的标准范围。现在,如果您已经建立连接,它会每秒检查一次,一旦您通过 wifi 连接,您就可以直接使用 ifup eth0 进行跟进
答案2
可能性:
- 在 eth0 的静态设置中,不要设置默认网关。 (我认为这才是真正的问题)
- 在 dhcp 客户端配置中添加一个钩子,以便在成功配置后启动另一个接口。