我有一台运行 Raspbian 7 版本(wheezy)的 Raspberry Pi 3。这些设备有一个以太网 RJ45 端口(eth0)和一个无线 WiFi 模块(wlan0)。我想按照此图所示设置它们:
基本上:
- 我通过有线 eth0 将 Rpi3 连接到交换机,然后从另一台 Ubuntu PC 上获取互联网,该 PC 上的互联网已“共享给其他计算机”
eth0
,这使 Ubuntu PC 成为地址为 10.42.0.1 的 DHCP 服务器,为 10.42.0.X 范围内的客户端分配地址。这就是为什么我想将eth0
Rpi3 上的端口保留为 DHCP 客户端。 - 我想
wlan0
在 Rpi3 上创建一个接入点 - 这意味着其他机器可以连接到它;我假设这意味着 Rpi3 必须是该接口上的 DHCP 服务器(否则它将无法为通过 WiFi 连接到它的客户端机器分配本地 IP)。
因此,我找到了这个链接:https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/- 我试图遵循它;首先我的 Raspbian 没有dhcpcd
,所以我安装了:
sudo apt-get install dhcpcd5
(它是dhcpcd5
有的/etc/dhcpcd.conf
- 否则dhcpcd
包实际上是dhcpcd3
并且它有/etc/dhcpcd.sh
)
在教程进行到一半时,我尝试按照说明进行操作:
$ sudo service dhcpcd restart
[FAIL] Not running dhcpcd because /etc/network/interfaces ... failed!
[FAIL] defines some interfaces that will use a DHCP client ... failed!
我的当前状态/etc/network/interfaces
是这样的:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 172.24.1.1
netmask 255.255.255.0
network 172.24.1.0
broadcast 172.24.1.255
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
其他资源如https://raspberrypi.stackexchange.com/questions/34914/wifi-not-working-on-startup提到显然问题在于/etc/network/interfaces
定义eth0
为 DHCP 客户端:
如果你看到这个,那么为了纠正,打开一个终端:
$ sudo nano /etc/network/interfaces
并将 dhcp 替换为 manual。接口中的两行是:
iface eth0 inet manual iface default inet manual
但是,我不想这样做 - 因为除非eth0
Rpi3 上有一个 DHCP 客户端,否则我无法使 Ubuntu PC 上的 Internet 共享正常工作!
因此,我得出的结论是,在将其中一个网络接口定义为 DHCP 客户端的计算机上运行 DHCP 服务器是不可能的?!这是真的吗?或者将其表述为一个问题:
- 在同一台机器上,我可以有一个网络接口 (
eth0
) 作为 DHCP 客户端,另一个网络接口 (wlan0
) 作为 DHCP 服务器吗?如果可以,该如何做?
答案1
如果我是你,我不会创建另一个 DHCP 服务器和子网,而是只需在你的 RPi 中创建一个网桥,它将同一网络中的无线和有线网络连接起来。
这样,无线客户端就可以直接从您的 Ubuntu 服务器获取 IP 地址。
您可以使用以下配置来实现这一点/etc/network/interfaces
:
auto br0
iface br0 inet dhcp
bridge_ports wlan0 eth0
auto wlan0
iface wlan0 inet manual
auto eth0
iface eth0 inet manual
br0
将是桥接接口的地址,它将桥接eth0
和wlan0
接口连接在一起。然后我们配置接口以通过 DHCP 获取 RPi 的 IP 地址。
在这里使用桥接器而不是另一个 NAT 层可以避免由双 NAT 引起的一些问题。
答案2
OP 在这里 - 嗯,一开始我以为这个名称的manual
意思和 一样static
,但事实似乎并非如此;我发现:
https://wiki.debian.org/NetworkConfiguration
要创建没有 IP 地址的网络接口,请使用手动方法并使用 pre-up 和 post-down 命令来启动和关闭接口。
iface eth0 inet manual pre-up ifconfig $IFACE up post-down ifconfig $IFACE down
...因此我复制了这些精确的行/etc/network/interfaces
(替换iface eth0 inet dhcp
) - 事实证明,它有效:
$ sudo service dhcpcd restart
dhcpcd[3253]: dhcpcd not running
dhcpcd[3254]: version 6.7.1 starting
dhcpcd[3254]: all: IPv6 kernel autoconf disabled
dhcpcd[3254]: eth0: adding address feXX::...
dhcpcd[3254]: if_addaddress6: Operation not supported
dhcpcd[3254]: DUID 00:XX:XX:...
dhcpcd[3254]: eth0: IAID eb:XX:....
dhcpcd[3254]: eth0: soliciting a DHCP lease
dhcpcd[3254]: eth0: offered 10.42.0.96 from 10.42.0.1
dhcpcd[3254]: eth0: leased 10.42.0.96 for 3600 seconds
dhcpcd[3254]: eth0: adding route to 10.42.0.0/24
dhcpcd[3254]: eth0: adding default route via 10.42.0.1
dhcpcd[3254]: forked to background, child pid 3307
因此,由于事情按预期进行(并且即使在重新启动 RPi3 后也是如此),我想就是这样了......