Raspberry-Pi

NetworkManager 多線連接問題

  • May 12, 2021

我有一台通過 DHCP 連接到路由器並且處於完全工作狀態的電腦,我在僅連結模式下添加樹莓派零時遇到問題。首先,我可以通過編輯從 DHCP 到僅連結的連接來連接 pi,但隨後我顯然失去了網際網路,因為我一次只能連接一個有線設備,而且它們不像我的主乙太網連接那樣 DHCP。然後,我雖然添加一個帶有僅連結集的新連接是一項簡單的工作,我可以用它來連接 pi,同時保持我的網際網路完好無損,但這就是問題開始的地方,我能夠建立連接,但出於某種原因無法將其分配給 pi,我收到兩條不同的消息,一條是activation of network connection failed,另一條是Unable to find a connection with UUID ('null').

我搜尋了網際網路,並沒有在我執行的其中一個返回連接列表的文章中找到很多建議,nmcli c show而這裡的新連接似乎都有一個 UUID。我被這個問題困住了,希望能得到任何幫助。

如何通過網路管理器nmcli為通過在 OTG 模式下執行的 USB 埠連接到主機 PC 的 Raspberry Pi 設置網路。

nmcli我通過命令行界面使用網路管理器成功地將橋接網路設置為 Raspberry Pi Zero 。

樹莓派設置

我按照上面評論中列出的這些說明設置了用於 OTG 乙太網連接的 Pi。

修改 Pi 的 MiniSD 卡的文件系統

將以下內容添加到 SD 卡的/boot/config.txt

# Enable USB OTG like ethernet
dtoverlay=dwc2

ssh在 SD 卡的/boot目錄中創建一個名為的空文件

touch ssh

/boot/cmdline.txt並通過將以下內容添加到 SD 卡的後面,將 OTG 乙太網模組附加到引導載入程序rootwait

` modules-load=dwc2,g_ether `

設置主機 PC 網橋

然後我在我的 PC 的有線乙太網埠上設置了一個橋接網路介面。

nmcli con add type bridge ifname br0
nmcli con modify bridge-br0 bridge.stp no
nmcli con add type bridge-slave ifname eth1 master bridge-br0

使用 Pi 上的 OTG 埠將 Raspberry Pi Zero 插入 PC。使用檢查介面名稱ifconfig. 然後將OTG介面添加到網橋。

nmcli con add type bridge-slave ifname enp0s29f7u1u4u3 master bridge-br0

一切就緒後,我啟用了連接:

nmcli con up bridge-br0
nmcli con up bridge-slave-eth1
nmcli con up bridge-slave-enp0s29f7u1u4u3

驗證所有介面為綠色nmcli connection

root@local:/etc/ssh# nmcli con
NAME                          UUID                                  TYPE            DEVICE          
bridge-br0                    ab1fab48-2c31-4ccc-90bf-db444751c080  bridge          br0             
bridge-slave-enp0s29f7u1u4u3  5efed614-89c7-48d4-996e-0a2e6e616846  802-3-ethernet  enp0s29f7u1u4u3 
bridge-slave-eth1             53c4d66a-3f9e-49f4-b954-92b13ecf96f8  802-3-ethernet  eth1            

觀看 DHCP 伺服器獲取 Raspberry Pi 地址

然後看著我的 DHCP 伺服器為樹莓派分配網路地址。根據您的配置,該資訊將通過您的路由器提供。SSH 到 Pi 成功:

SSH 進入 Pi

root@local:/etc/ssh# ssh pi@192.168.xxx.xxx
pi@192.168.xxx.xxx's password: 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Nov  1 19:33:48 2017 from 192.168.xxx.xxx
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.4.38+ #938 Thu Dec 15 15:17:54 GMT 2016 armv6l GNU/Linux
pi@raspberrypi:~ $ ifconfig
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:724 errors:0 dropped:0 overruns:0 frame:0
         TX packets:724 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1 
         RX bytes:58980 (57.5 KiB)  TX bytes:58980 (57.5 KiB)

usb0      Link encap:Ethernet  HWaddr 8e:31:5b:06:db:bb  
         inet addr:192.168.xxx.xxx  Bcast:192.168.xxx.xxx  Mask:255.255.255.0
         inet6 addr: fe80::xxx:/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:756 errors:0 dropped:0 overruns:0 frame:0
         TX packets:430 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:90941 (88.8 KiB)  TX bytes:76278 (74.4 KiB)

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway           Genmask         Flags Metric Ref    Use Iface
default         192.168.xxx.xxx   0.0.0.0         UG    202    0        0 usb0
192.168.xxx.0     *               255.255.255.0   U     202    0        0 usb0

pi@raspberrypi:~ $ sudo -s
root@raspberrypi:/home/pi# ping unix.stackexchange.com
PING unix.stackexchange.com (151.101.65.69) 56(84) bytes of data.
64 bytes from 151.101.65.69: icmp_seq=1 ttl=55 time=27.2 ms
64 bytes from 151.101.65.69: icmp_seq=2 ttl=55 time=7.91 ms
64 bytes from 151.101.65.69: icmp_seq=3 ttl=55 time=6.40 ms
64 bytes from 151.101.65.69: icmp_seq=4 ttl=55 time=6.78 ms
64 bytes from 151.101.65.69: icmp_seq=5 ttl=55 time=7.87 ms
^C
--- unix.stackexchange.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 6.404/11.240/27.219/8.012 ms
root@raspberrypi:/home/pi#

附錄

在閱讀了 Pi OTG 網路說明的第 2 部分後,我將添加他們提供的組件以永久設置 Pi 的 MAC 地址。使用永久 MAC 地址,您的 DHCP 伺服器和/或路由器將在每次重啟 RPi 時停止提供連續的 IP 地址。

webonomic 說:

您可以通過在 pi 的引導分區上將其附加到 cmdline.txt 來執行此操作:

g_ether.host_addr=8a:3e:d4:ce:89:53

建立連接後,只需從筆記型電腦的 ifconfig 命令中獲取地址即可。

他們繼續提到將 Pi 的配置從 DHCP 更改為靜態 IP。但是,我建議這樣做。我總是建議在網路的 DHCP 伺服器上設置靜態租約。這樣,只需修改 DHCP 伺服器即可重新設計您的網路。還有一些有用的方法可以劃分子網,以限制其他主機對某些主機的訪問。

大多數現代家庭路由器都允許設置靜態租約。最好利用 DHCP 伺服器的全部功能。

補充筆記

我發現設置 g_ether.host_addr 不足以為 Pi 提供恆定的 MAC 地址。設置 g_ether.dev_addr 的第二個要求

工具文件還建議設置製造商和產品編號。

Linux-USB 小工具 API 框架說:

為了更好地支持 DHCP、ZCIP 和相關的網路自動配置,您需要管理乙太網地址,以便每個外圍設備在每次啟動時都重複使用相同的唯一地址。您應該使用已註冊的 IEEE 802 公司 ID 分配這些地址;這也將使設備在 Linux 主機中顯示為“ethN”介面,而不是“usbN”。如果您使用的是 U-Boot 等引導韌體,則無需單獨的 ID PROM(或 initrd)即可輕鬆完成此操作:

*#* manufacturing assigns Ethernet addresses; company id is xx:xx:xx
setenv eth_a_host    xx:xx:xx:01:23:45
setenv eth_a_gadget  xx:xx:xx:67:89:ac
setenv eth_i_vendor  "Great Stuff, LLC"
setenv eth_i_product "Our Cool Thing"
setenv eth_args             g_ether.host_addr=\$(eth_a_host)
setenv eth_args $(eth_args) g_ether.dev_addr=\$(eth_a_gadget)
setenv eth_args $(eth_args) g_ether.iManufacturer=\$(eth_i_vendor)
setenv eth_args $(eth_args) g_ether.iProduct=\$(eth_i_product)
*#* you can assign USB vendor/product/version codes too...
setenv add_eth_args setenv bootargs $(eth_args) \$(bootargs)
...
setenv bootcmd run add_eth_args\;bootm

這些參數也可以附加到cmdline.txtDHCP 伺服器以更好地使用。

引用自:https://unix.stackexchange.com/questions/401672