Como configurar o Networking via nmcli
do Network Manager para um Raspberry Pi conectado a um PC host através da porta USB em execução no modo OTG.
Configurei com êxito uma rede de ponte para um Raspberry Pi Zero usando o Network Manager através da interface de linha de comando nmcli
.
Configuração do Raspberry Pi
Eu segui estas instruções listado nos comentários acima para configurar o Pi para conexão Ethernet OTG.
Modifique o sistema de arquivos do cartão MiniSD do Pi
Adicione o seguinte ao /boot/config.txt
# Enable USB OTG like ethernet
dtoverlay=dwc2
Crie um arquivo vazio chamado ssh
no diretório /boot
do cartão SD
touch ssh
E anexe o módulo Ethernet do OTG ao carregador de boot, adicionando o seguinte ao /boot/cmdline.txt
do cartão SD após rootwait
' modules-load=dwc2,g_ether '
Configurar ponte de rede do PC host
Em seguida, configuro uma interface de rede de ponte na porta Ethernet com fio do meu 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
Conectei o Raspberry Pi Zero ao PC usando a porta do OTG no Pi. Verifiquei o nome da interface usando ifconfig.
E, em seguida, adicionei a interface do OTG à ponte de rede.
nmcli con add type bridge-slave ifname enp0s29f7u1u4u3 master bridge-br0
Com tudo definido, ativei as conexões:
nmcli con up bridge-br0
nmcli con up bridge-slave-eth1
nmcli con up bridge-slave-enp0s29f7u1u4u3
Verificadas todas as interfaces verdes com 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
Assista ao servidor DHCP para o endereço Raspberry Pi
Em seguida, observei meu servidor DHCP para a atribuição de endereço de rede do Raspberry Pi. Na sua configuração, essa informação estaria disponível através do seu roteador. SSH para Pi sucesso:
SSH em Pi
root@local:/etc/ssh# ssh [email protected]
[email protected]'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#
Adendo
Depois de ler Parte 2 das instruções de rede Pi OTG, adicionarei o componente que elas fornecem para definir permanentemente o endereço MAC do Pi. Com um endereço MAC permanente, seu servidor DHCP e / ou roteador deixarão de fornecer endereços IP sequenciais a cada reinicialização do RPi.
webonomic diz:
You do this by appendign(sic) this to cmdline.txt on the boot partition on your pi:
g_ether.host_addr=8a:3e:d4:ce:89:53
Just take the address form the ifconfig command of your laptop, after you have established a connection.
Eles mencionam a alteração da configuração do Pi do DHCP para IP estático. No entanto, eu não recomendo fazê-lo dessa maneira. Eu sempre recomendo configurar concessões estáticas no servidor DHCP da sua rede. Desta forma, apenas o servidor DHCP precisa ser modificado para redesenhar sua rede. Também existem métodos úteis para dividir sub-redes para limitar o acesso a determinados hosts de outras pessoas.
A maioria dos roteadores domésticos modernos permite configurar concessões estáticas. É uma boa prática utilizar todos os recursos do seu servidor DHCP.
Notas adicionais
Eu descobri que a configuração g_ether.host_addr não é suficiente para fornecer um endereço MAC constante para o Pi. Há um segundo requisito para definir g_ether.dev_addr
A documentação do gadget também recomenda definir um fabricante e um número de produto.
O Linux-USB Gadget API Framework diz:
To better support DHCP, ZCIP, and related network autoconfiguration, you'll want to manage Ethernet addresses so that each peripheral reuses the same unique address every time it boots. You should assign those addresses using a registered IEEE 802 company id; this will also make the device appear to Linux hosts as an "ethN" interface, not as "usbN". It's easy to do this without a separate ID PROM (or an initrd) if you're using boot firmware like U-Boot:
*#* 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
Esses parâmetros também podem ser anexados ao cmdline.txt
para melhor usabilidade com servidores DHCP.