单台机器在一个网络接口上有 DHCP 客户端,在另一个网络接口上有 DHCP 服务器?

单台机器在一个网络接口上有 DHCP 客户端,在另一个网络接口上有 DHCP 服务器?

我有一台运行 Raspbian 7 版本(wheezy)的 Raspberry Pi 3。这些设备有一个以太网 RJ45 端口(eth0)和一个无线 WiFi 模块(wlan0)。我想按照此图所示设置它们:

我的 rpi3 网络.png

基本上:

  • 我通过有线 eth0 将 Rpi3 连接到交换机,然后从另一台 Ubuntu PC 上获取互联网,该 PC 上的互联网已“共享给其他计算机” eth0,这使 Ubuntu PC 成为地址为 10.42.0.1 的 DHCP 服务器,为 10.42.0.X 范围内的客户端分配地址。这就是为什么我想将eth0Rpi3 上的端口保留为 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

但是,我不想这样做 - 因为除非eth0Rpi3 上有一个 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将是桥接接口的地址,它将桥接eth0wlan0接口连接在一起。然后我们配置接口以通过 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 后也是如此),我想就是这样了......

相关内容