我有一个运行 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 实现它。