Ubuntu 嵌入式系统的 DHCP

Ubuntu 嵌入式系统的 DHCP

我有一个运行 Ubuntu 的嵌入式 Linux 系统,通过以太网连接到我的笔记本电脑,我的笔记本电脑也运行 Ubuntu。我的笔记本电脑通过 wifi 连接到我的家庭网络。我想通过以太网在我的笔记本电脑和主板 (Altera DE1-SoC) 之间创建一个本地网络,这个网络通过笔记本电脑中的 wifi NIC 连接到我的家庭网络。理想情况下,我希望允许嵌入式系统在我的家庭网络上执行 DCHP 发现以获取自己的 IP 地址。我需要采取哪些主要配置/步骤来执行此操作?我的笔记本电脑上的接口是

enp1s0    Link encap:Ethernet  HWaddr ec:f4:bb:9c:2f:35  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:736 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5148 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:251712 (251.7 KB)  TX bytes:943851 (943.8 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1303331 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1303331 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:504332328 (504.3 MB)  TX bytes:504332328 (504.3 MB)

wlp2s0    Link encap:Ethernet  HWaddr a0:88:69:70:16:d8  
          inet addr:192.168.1.148  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2601:4b:500:1d01:c03a:e05e:9c30:b44e/64 Scope:Global
          inet6 addr: fe80::1095:5763:9405:b652/64 Scope:Link
          inet6 addr: 2601:4b:500:1d01:774f:fccd:5479:e9bc/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6588443 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2426855 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6843503929 (6.8 GB)  TX bytes:502932524 (502.9 MB)

我相信 enp1s0 对应于以太网网卡,而 wlp2s0 对应于无线网卡。

在董事会里我有

jfrye@DE1-SoC:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr da:e9:a5:9c:c8:58
          inet6 addr: fe80::d8e9:a5ff:fe9c:c858/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:577 errors:0 dropped:0 overruns:0 frame:0
          TX packets:546 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:197334 (197.3 KB)  TX bytes:175844 (175.8 KB)
          Interrupt:31 Base address:0x4000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:72 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:6016 (6.0 KB)  TX bytes:6016 (6.0 KB)

笔记本电脑上的 /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)

auto lo wlp2s0
iface lo inet loopback

auto lo enp1s0
iface enps1s0 inet dhcp 

板上的 /etc/network/interfaces

#interfaces (5) file used by ifup(8) and ifdown(8)

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

当我在主板上 ifdown 和 ifup eth0 时,我得到

Listening on LPF/eth0/da:e9:a5:9c:c8:58
Sending on   LPF/eth0/da:e9:a5:9c:c8:58
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 15 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 17 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 13 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 11 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 21 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 19 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 12 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 10 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 14 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 15 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 9 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 16 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 13 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 16 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 20 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 10 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7 (xid=0xb785c867)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0xb785c867)
No DHCPOFFERS received.

答案1

您要求的功能很难实现,因为它需要 4 个地址的 Wi-Fi 标头。每个 Wi-Fi 数据包可以包含 4 个 MAC 地址 - 一个起始和结束以太网地址以及一个起始和结束 Wi-Fi 地址。但是,在大多数家庭应用中,结束以太网地址是不需要的,因为结束 Wi-Fi 地址通常指的是同一设备(例如您的手机或笔记本电脑)。因此,许多家庭 Wi-Fi 路由器使用 4 个地址标头阻止任何流量,据说是出于安全原因。

我尝试过类似的任务 - 我们有一个仅支持以太网的服务器,我们想将其连接到我们的 Wi-Fi 网络。我们手头没有 Wi-Fi 适配器或卡,但我们有很多 Raspberry Pi,所以我们决定简单地使用 Pi 作为适配器。然而,我们遇到了这个问题。

展望未来,您有几种选择(我知道的):

  • 看看您的路由器是否支持 4 地址数据包,在这种情况下,您只需在笔记本电脑上桥接网络 - 每个路由器都不同,而您的路由器可能支持 4 地址路由。

  • 在连接到 Wi-Fi 时,在计算机上创建一个子网,以便与嵌入式设备进行通信 - 这可以使用在以太网接口上运行的 DHCP 服务器来实现。您还可以实施 NAT,以允许嵌入式设备访问您的 Wi-Fi 网络和互联网。但是,如果您希望嵌入式设备可从 Wi-Fi 网络访问,则必须进行端口转发。

  • 直接在笔记本电脑的接口之间传递数据包,有效地将其从网络中移除。这是我们使用 Pis 的路线。我们使用无线网络线。我甚至写了一篇快速安装脚本对于可能在 Ubuntu 上运行的 Pi(如果您禁用 netplan)。在此方案下,网络将嵌入式设备视为具有笔记本电脑的 Wi-Fi MAC 地址。我们在使用 DHCP 时遇到了问题(可能是因为有线计算机忽略了具有错误地址的 DHCPOFFERS),因此我建议在此路由中使用静态 IP。

抱歉,我无法提供最佳解决方案 - 据我所知,硬件不支持它。如果您想出更好的解决方案,请告诉我,这样我也可以用我们的 Pi 实现它。

相关内容