{"id":4656,"date":"2017-02-12T10:00:55","date_gmt":"2017-02-12T09:00:55","guid":{"rendered":"https:\/\/www.blaess.fr\/christophe\/?p=4656"},"modified":"2017-02-10T10:57:18","modified_gmt":"2017-02-10T09:57:18","slug":"pi-zero-et-usb-net-2","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2017\/02\/12\/pi-zero-et-usb-net-2\/","title":{"rendered":"Pi Zero et USB-net (2)"},"content":{"rendered":"<p><a href=\"https:\/\/www.blaess.fr\/christophe\/2017\/02\/05\/raspberry-pi-zero-et-usb-net\/pi-zero-et-usb-net-02\/\" rel=\"attachment wp-att-4645\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-4645\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Pi-Zero-et-USB-net-02-300x300.jpg\" alt=\"Pi Zero et USB-net\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Pi-Zero-et-USB-net-02-300x300.jpg 300w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Pi-Zero-et-USB-net-02-150x150.jpg 150w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Pi-Zero-et-USB-net-02.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Dans <a href=\"https:\/\/www.blaess.fr\/christophe\/2017\/02\/05\/raspberry-pi-zero-et-usb-net\/\">l&rsquo;article pr\u00e9c\u00e9dent<\/a>, nous avons r\u00e9ussi \u00e0 nous connecter depuis un PC h\u00f4te vers un <strong>Raspberry Pi Zero<\/strong> uniquement en employant un c\u00e2ble USB semblable \u00e0 ceux pour t\u00e9l\u00e9phone portable.<\/p>\n<p style=\"text-align: justify;\">N\u00e9anmoins, nous avions relev\u00e9 plusieurs points restant \u00e0 am\u00e9liorer&nbsp;:<\/p>\n<ul>\n<li>la connexion SSH est un peu longue \u00e0 \u00e9tablir,<\/li>\n<li>le Raspberry Pi Zero n&rsquo;a pas acc\u00e8s \u00e0 Internet,<\/li>\n<li>il est n\u00e9cessaire de fixer manuellement l&rsquo;adresse IP de l&rsquo;interface USB-net du c\u00f4t\u00e9 PC.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">R\u00e9glons ces probl\u00e8mes un \u00e0 un.<\/p>\n<p>\n<!--more-->\n<\/p>\n<h1>Acc\u00e9l\u00e9rer la connexion SSH<\/h1>\n<p style=\"text-align: justify;\">Le serveur SSH (d\u00e9mon <code>sshd<\/code>) pr\u00e9sent sur la distribution <em>Raspbian<\/em> du Pi Zero essaye d&rsquo;identifier la machine qui vient se connecter en utilisant une r\u00e9solution DNS. Puisque l&rsquo;acc\u00e8s au DNS est impossible (pas d&rsquo;acc\u00e8s Internet), et que m\u00eame s&rsquo;il \u00e9tait joignable il y a peu de chances qu&rsquo;il connaisse le PC h\u00f4te, il faut attendre que le d\u00e9mon <code>sshd<\/code> \u00e9choue dans cette identification avant de poursuivre la connexion.<\/p>\n<p style=\"text-align: justify;\">Nous pouvons d\u00e9sactiver ais\u00e9ment ce comportement en \u00e9ditant le fichier de configuration de <code>sshd<\/code> (sur le Raspberry Pi Zero).<\/p>\n<pre>pi@raspberry:~ $ <strong>sudo vi \/etc\/ssh\/sshd_config<\/strong><\/pre>\n<p style=\"text-align: justify;\">Il suffit d&rsquo;ajouter la ligne suivante \u00e0 la fin du fichier&nbsp;:<\/p>\n<pre><strong>\/etc\/ssh\/sshd_config:<\/strong>\n[...]\nUsePAM yes\n\n<strong>UseDNS no<\/strong><\/pre>\n<pre>pi@raspberry:~ $ <strong>sudo reboot<\/strong><\/pre>\n<p style=\"text-align: justify;\">\u00c0 partir de ce moment, la connexion sera plus ais\u00e9e&#8230;<\/p>\n<p style=\"text-align: justify;\">L&rsquo;avantage de cette premi\u00e8re solution est qu&rsquo;elle est assez g\u00e9n\u00e9rique, je l&rsquo;adopte sur la plupart des syst\u00e8mes embarqu\u00e9s que je configure.<\/p>\n<p style=\"text-align: justify;\">Dans notre cas sp\u00e9cifique, o\u00f9 une seule machine est susceptible de venir se connecter sur le serveur SSH, on peut adopter la solution propos\u00e9e par St\u00e9phane Peters <a href=\"https:\/\/www.blaess.fr\/christophe\/2017\/02\/05\/raspberry-pi-zero-et-usb-net\/#comment-186068\">en commentaire de l&rsquo;article pr\u00e9c\u00e9dent<\/a>. Il s&rsquo;agit d&rsquo;\u00e9diter le fichier <code>\/media\/$USER\/etc\/hosts<\/code> pour y ajouter une ligne identifiant le PC&nbsp;:<\/p>\n<pre><strong>\/media\/$USER\/etc\/hosts:<\/strong>\n[...]\n<strong>192.168.7.1 host-pc<\/strong>\n<\/pre>\n<h1>Acc\u00e9der \u00e0 Internet depuis le Raspberry Pi Zero<\/h1>\n<p style=\"text-align: justify;\">Lorsque nous somme sur le Pi Zero, la seule connexion vers l&rsquo;ext\u00e9rieur est le lien USB-net point-\u00e0-point avec le PC h\u00f4te. Pour acc\u00e9der \u00e0 Internet il nous faudra donc passer par ce PC (\u00e0 supposer bien s\u00fbr qu&rsquo;il soit lui m\u00eame reli\u00e9 au Net). Pour cela nous allons configurer les r\u00e8gles de routage et de filtration du noyau Linux du PC<\/p>\n<p style=\"text-align: justify;\">Une fois la connexion \u00e9tablie, il suffit d&rsquo;ex\u00e9cuter sur le PC quelques lignes de commande <code>iptables<\/code> pour activer le NAT (<em>Network Address Translation<\/em>) ainsi que la redirection (<em>forwarding<\/em>) au niveau IP.<\/p>\n<p style=\"text-align: justify;\">Je pense que seules les deux derni\u00e8res commandes sont indispensables, mais j&rsquo;ai l&rsquo;habitude d&rsquo;ex\u00e9cuter <a href=\"https:\/\/www.blaess.fr\/christophe\/files\/article-2017-02-12\/set-nat-rules.sh\">le script ci-dessous<\/a> complet afin de repartir d&rsquo;une configuration vierge.<\/p>\n<pre><strong><a href=\"https:\/\/www.blaess.fr\/christophe\/files\/article-2017-02-12\/set-nat-rules.sh\">set-nat-rules.sh<\/a>:<\/strong>\n#! \/bin\/sh\n\n# Inside network (without Internet access).\nINSIDE=<strong>usb0<\/strong>\n\n# Outside network (with Internet access).\nOUTSIDE=<strong>eth0<\/strong>\n\n# Flush the rules of the NAT table.\niptables -t nat -F  || { echo \"$0: error while flushing NAT table rules.\" &gt;&amp;2; exit 1; }\n\n# Delete the user-defined chains of the NAT table.\niptables -t nat -X  || { echo \"$0: error while deleting NAT table chains.\" &gt;&amp;2; exit 1; }\n\n# Reset the statistics of the NAT table.\niptables -t nat -Z  || { echo \"$0: error while resetting NAT table counters.\" &gt;&amp;2; exit 1;\n }\n\n# Flush the current forwarding rules.\niptables -F FORWARD || { echo \"$0: error while flushing forwarding rules.\" &gt;&amp;2; exit 1; }\n\n# Accept packets from INSIDE network to OUTSIDE network.\niptables -A FORWARD -i ${INSIDE} -o ${OUTSIDE} -j ACCEPT   || { echo \"$0: error while conf\niguring ${INSIDE}-&gt;${OUTSIDE} forwarding.\" &gt;&amp;2; exit 1; }\n\n# Apply NAT to OUTSIDE packets.\niptables -t nat -A POSTROUTING -o ${OUTSIDE} -j MASQUERADE || { echo \"$0: error while conf\niguring NAT on ${OUTSIDE}.\" &gt;&amp;2; exit 1; }\n\n# Activate the packet forwarding.\necho 1 &gt; \/proc\/sys\/net\/ipv4\/ip_forward || { echo \"$0: error while enabling IP forwarding.\"\n &gt;&amp;2; exit 1; }\n\necho \"Configuration OK.\" &gt;&amp;2\n\nexit 0<\/pre>\n<p style=\"text-align: justify;\">J&rsquo;ex\u00e9cute donc la commande suivante sur mon PC, apr\u00e8s avoir ajust\u00e9 les deux premi\u00e8res variables du script.<\/p>\n<pre>$ <strong>sudo .\/set-nat-rules.sh<\/strong><\/pre>\n<p style=\"text-align: justify;\">Et sur le Pi Zero je tente un acc\u00e8s vers Internet<\/p>\n<pre>pi@raspberrypi:~ $ <strong>ping www.kernel.org<\/strong>\nPING pub.all.kernel.org (198.145.20.140) 56(84) bytes of data.\n64 bytes from tiz-korg-pub.kernel.org (198.145.20.140): icmp_seq=1 ttl=46 time=166 ms\n64 bytes from tiz-korg-pub.kernel.org (198.145.20.140): icmp_seq=2 ttl=46 time=188 ms\n64 bytes from tiz-korg-pub.kernel.org (198.145.20.140): icmp_seq=3 ttl=46 time=174 ms\n64 bytes from tiz-korg-pub.kernel.org (198.145.20.140): icmp_seq=4 ttl=46 time=167 ms\n^C\n--- pub.all.kernel.org ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3004ms\nrtt min\/avg\/max\/mdev = 166.502\/174.144\/188.734\/8.915 ms\npi@raspberrypi:~ $<\/pre>\n<p style=\"text-align: justify;\">Le temps de ping est un peu long (170 ms environ), \u00e0 cause du r\u00e9seau USB-net et de la redirection sur le PC, mais cela fera l&rsquo;affaire pour notre usage.<\/p>\n<p style=\"text-align: justify;\">On pourra noter qu&rsquo;au bout de quelques dizaines de secondes, l&rsquo;heure du Raspberry Pi Zero sera correctement mise \u00e0 jour. Il inclut en effet un client NTP (<em>Network Time Protocol<\/em>) qui interroge r\u00e9guli\u00e8rement des serveurs distants.<\/p>\n<h1>Automatiser l&rsquo;affectation d&rsquo;adresse<\/h1>\n<p style=\"text-align: justify;\">Pour que le PC re\u00e7oive automatiquement une adresse IP lors de l&rsquo;\u00e9tablissement de l&rsquo;interface USB-net, il suffit d&rsquo;installer un serveur DHCP sur le Raspberry Pi Zero.<\/p>\n<p style=\"text-align: justify;\">Ceci est facile \u00e0 faire, puisque nous disposons de tout le confort de la distribution Raspbian et de ses packages. Nous pouvons par exemple installer le petit serveur <code>udhcpd<\/code> (provenant de Busybox) facile \u00e0 configurer.<\/p>\n<pre>pi@raspberrypi:~ $ <strong>sudo apt-get update<\/strong>\n[...]\npi@raspberrypi:~ $ <strong>sudo apt-get install -y udhcpd<\/strong>\n[...]<\/pre>\n<p style=\"text-align: justify;\">Il faut configurer le serveur DHCP pour lui indiquer les adresses qui nous int\u00e9ressent.<\/p>\n<pre>pi@raspberrypi:~ $ <strong>sudo mv \/etc\/udhcpd.conf \/etc\/udhcpd.conf.backup<\/strong>\npi@raspberrypi:~ $ <strong>sudo nano \/etc\/udhcpd.conf<\/strong><\/pre>\n<p style=\"text-align: justify;\">On peut utiliser une configuration tr\u00e8s simple qui impose \u00e0 notre correspondant (le PC) l&rsquo;adresse 192.168.7.1&nbsp;:<\/p>\n<pre><strong>\/etc\/udhcpd.conf:<\/strong>\n start      192.168.7.1\n end        192.168.7.1\n interface  usb0\n max_leases 1\n option subnet 255.255.255.252<\/pre>\n<p style=\"text-align: justify;\">Nous devons \u00e9galement faire d\u00e9marrer le serveur <code>udhcpd<\/code> automatiquement au boot. Pour cela nous devons modifier une option du fichier <code>\/etc\/default\/udhcpd<\/code>.<\/p>\n<pre><strong>\/etc\/default\/udhcpd:<\/strong>\nDHCPD_ENABLED=\"<strong>yes<\/strong>\"\n[...]<\/pre>\n<pre>pi@raspberrypi:~ $ <strong>sudo reboot<\/strong><\/pre>\n<p style=\"text-align: justify;\">Il devient possible, sur le PC, de modifier la configuration du <em>Network Manager<\/em> pour que l&rsquo;interface USB-net soit initialis\u00e9e automatiquement avec le protocole DHCP.<\/p>\n<p><a href=\"https:\/\/www.blaess.fr\/christophe\/2017\/02\/05\/pi-zero-et-usb-net-2\/capture-du-2017-02-05-17-16-36\/\" rel=\"attachment wp-att-4659\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4659\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Capture-du-2017-02-05-17-16-36.png\" alt=\"Bo\u00eete &quot;Configuration de connexion filaire 1&quot;\" width=\"576\" height=\"469\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Capture-du-2017-02-05-17-16-36.png 576w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Capture-du-2017-02-05-17-16-36-300x244.png 300w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Attention \u00e0 bien laisser coch\u00e9e la case &ldquo;<em>Utiliser cette connexion uniquement pour les ressources de son r\u00e9seau<\/em>&rdquo;. C&rsquo;est ce qui nous garantit que nous pourrons continuer \u00e0 acc\u00e9der \u00e0 Internet gr\u00e2ce \u00e0 l&rsquo;autre interface du PC.<\/p>\n<p><a href=\"https:\/\/www.blaess.fr\/christophe\/2017\/02\/05\/pi-zero-et-usb-net-2\/capture-du-2017-02-05-17-16-47\/\" rel=\"attachment wp-att-4661\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4661\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Capture-du-2017-02-05-17-16-47.png\" alt=\"Bo\u00eete &quot;Modification des routes IPv4 pour Connexion filaire 1&quot;\" width=\"465\" height=\"282\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Capture-du-2017-02-05-17-16-47.png 465w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/02\/Capture-du-2017-02-05-17-16-47-300x182.png 300w\" sizes=\"auto, (max-width: 465px) 100vw, 465px\" \/><\/a><\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Nous avons obtenu une configuration assez confortable pour le Raspberry Pi Zero&nbsp;: simplement branch\u00e9 \u00e0 un PC par un c\u00e2ble USB standard, il devient joignable via SSH sur une adresse IP connue, et peut acc\u00e9der librement \u00e0 Internet (pour peu que le PC fasse le relais).<\/p>","protected":false},"excerpt":{"rendered":"<p>Dans l&rsquo;article pr&eacute;c&eacute;dent, nous avons r&eacute;ussi &agrave; nous connecter depuis un PC h&ocirc;te vers un Raspberry Pi Zero uniquement en employant un c&acirc;ble USB semblable &agrave; ceux pour t&eacute;l&eacute;phone portable. N&eacute;anmoins, nous avions relev&eacute; plusieurs points restant &agrave; am&eacute;liorer&nbsp;: la connexion SSH est un peu longue &agrave; &eacute;tablir, le Raspberry Pi Zero n&rsquo;a pas acc&egrave;s [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,11],"tags":[],"class_list":["post-4656","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=4656"}],"version-history":[{"count":19,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4656\/revisions"}],"predecessor-version":[{"id":4677,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4656\/revisions\/4677"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=4656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=4656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=4656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}