用於嵌入式系統的 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 (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 一起走的路線。我們用了wlan_kabel。我甚至寫了一個快速設定腳本對於可能在 Ubuntu 上運行的 Pi(如果禁用 netplan)。在此方案下,網路將嵌入式裝置視為具有筆記型電腦的 Wi-Fi MAC 位址。我們在使用 DHCP 時遇到了問題(可能是因為有線電腦忽略了位址錯誤的 DHCPOFFERS),因此我建議在此路由中使用靜態 IP。

抱歉,我無法提供最佳解決方案 - AFAIK,硬體不支援它。如果您想出更好的方案,請告訴我,這樣我也可以用我們的 Pi 來實現它。

相關內容