回答:
2020-02-13に更新されたRaspbian Buster Lite 2020-02-05を備えたRaspberry Pi 4Bでテストされています。
Raspbian Buster Lite 2019-07-10が2019-08-15に更新されました。
で行われた更新sudo apt update && sudo apt full-upgrade && sudo reboot
。
Raspbian Stretchでは機能しません。
ここでは、Raspbian Stretch Liteの最後にテストされたリビジョンが見つかります。
もちろんsystemd-networkd
、デフォルトの代わりに使用するdhcpcd
ことも可能です。ただし、すべての場合に意味があるわけではありません。
networkdは、ネットワークインターフェースを構成するための小さくて無駄のないサービスであり、ホットプラグと仮想化されたネットワーキングが存在する世界のサーバーのユースケースを主な対象として設計されています。その構成は、精神と抽象化レベルがifupdownと似ていますが、ブリッジ、ボンド、VLANなどを構成するための追加のパッケージは必要ありません。WLANの管理にはまだあまり適していません。NetworkManagerは、このようなデスクトップの使用例にはさらに適切です。[1]
しかし、テレビやアンプの近くにあるraspiで、オーディオやビデオのストリーミング、カメラなどの作業を24時間年中無休で行うのsystemd-networkd
は、良い選択です。ただし、完全な切り替えを行う必要があります。networking
および/またはと混同する方法はありませんdhcpcd
。
参考までに、Raspbian Buster Lite 2019-07-10のフラッシュされたSDカードを使用します。
sshのみのヘッドレスインストールに注目します。これを使用している場合は、タイプミスを再確認してください。そうでない場合、接続が切断されて失われます。ヘッドレスインストールが必要な場合は、SSH(セキュアシェル)を参照し、セクション3.ヘッドレスRaspberry PiでSSHを有効にします(別のマシンのSDカードにファイルを追加します)。
シャットダウン時のトラブルシューティング、または以前の起動からのメッセージを確認するには、systemd [1]からのメッセージについて、journaldで永続的なロギングを有効にすることができます。大きなログファイルと保存場所が生成されるため、必要な場合にのみ有効にすることをお勧めします。systemd-networkdはこれを必要とせず、現在のセッションのログは常に利用可能です。
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
古いものを無効にします。サービスを停止せず、無効にするだけです!そのため、次回の起動時にのみ有効になります。
pi@raspberrypi: ~$ sudo -Es
では/etc/resolvconf.conf
これらの行の挿入。
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
次に、ファイル/etc/network/interfaces
で管理されている従来のDebianネットワークを無効にし、デフォルトのRaspbian dhcpcd
ネットワーク管理を無効にします。完全に無効になり、他のサービスから開始できないようにマスクします。
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
そしてsystemd-networkdを有効にします:
root@raspberrypi: ~# systemctl enable systemd-networkd.service
root@raspberrypi: ~# systemctl enable systemd-resolved.service
root@raspberrypi: ~# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
このファイルを設定で作成します。これを1つのブロックにコピーしてコマンドラインに貼り付けるだけでcat
、両方のEOFを含めて含めることができます(区切り文字EOFはファイルの一部を取得しません)。
root@raspberrypi: ~# cat >/etc/systemd/network/04-eth.network <<EOF
[Match]
Name=e*
[Network]
# to use static IP (with your settings) toggle commenting the next 8 lines.
#Address=192.168.50.60/24
#DNS=84.200.69.80 1.1.1.1
#[Route]
#Gateway=192.168.50.1
#Metric=10
DHCP=yes
[DHCP]
RouteMetric=10
EOF
root@raspberrypi: ~# exit
pi@raspberrypi: ~$
再起動しますが、イーサネットコードが接続されている場合のみ;-)
RasPiが新しいIPアドレスを取得する可能性があるため、sshとの次の接続のためにそれを確認する必要がある場合があります。
このファイルを設定で作成します。
pi@raspberrypi:~ $ sudo -Es
root@raspberrypi:~ # cat >/etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
# to use static IP (with your settings) toggle commenting the next 8 lines.
#Address=192.168.50.61/24
#DNS=84.200.69.80 1.1.1.1
#[Route]
#Gateway=192.168.50.1
#Metric=20
DHCP=yes
[DHCP]
RouteMetric=20
EOF
root@raspberrypi:~ #
セットアップこのファイルではwpa_supplicantとのためのあなたの設定ssid=
とpsk=
、それを有効にします。
root@raspberrypi:~ # cat >/etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
ssid="TestNet"
psk="realyNotMyPassword"
key_mgmt=WPA-PSK
proto=RSN WPA
}
EOF
root@raspberrypi:~ # chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
root@raspberrypi:~ # systemctl disable wpa_supplicant.service
root@raspberrypi:~ # systemctl enable wpa_supplicant@wlan0.service
root@raspberrypi:~ # rfkill unblock 0
root@raspberrypi:~ # exit
root@raspberrypi:~ $
Wi-Fi接続がある場合は再起動します。ほとんどの人が持っています。幸運を ...
RasPiが新しいIPアドレスを取得する可能性があるため、sshとの次の接続のためにそれを確認する必要がある場合があります。
上記のように、両方のインターフェースをセットアップして実行する必要があります。両方のインターフェイスがアップしている場合は問題ありません。カーネルは、メトリックが最も低いインターフェイスを最初に使用します。ここでは、イーサネットインターフェイスが最初に使用されます。しかし、これには大きな欠点があります。ご覧のとおり、~$ ip addr
各インターフェースには独自のIPアドレスがあります。カーネルがダウンしたためにカーネルがインターフェースを切り替える場合、新しいソースIPアドレスも使用します。これにより、ssh、ストリーミング、ログインセッションなどの確立されたステートフルTCP通信が切断されます。変更されたソースIPアドレスから新しい接続を使用できますが、古い接続はスタックしています。それは私たちが本当に望んでいることではありません。
この問題の解決策は結合です。bond0
設定を変更しない暫定インターフェースを作成します。有線とwifiのインターフェースがに切り替わりますbond0
。
最初に、単一のイーサネットとwifiネットワークファイルを無効にします。
pi@raspberrypi:~ $ sudo -Es
root@raspberrypi:~ # cd /etc/systemd/network/
root@raspberrypi:~ # mv 04-eth.network 04-eth.network~
root@raspberrypi:~ # mv 08-wifi.network 08-wifi.network~
次に、これらの4つのファイルを使用してボンディングをセットアップします。
root@raspberrypi:~ # cat >/etc/systemd/network/02-bond0.netdev <<EOF
[NetDev]
# status: cat /proc/net/bonding/bond0
Name=bond0
Kind=bond
[Bond]
Mode=active-backup
# primary slave is defined in *eth.network
MIIMonitorSec=500ms
UpDelaySec=1000ms
DownDelaySec=1000ms
MinLinks=1
EOF
root@raspberrypi:~ # cat >/etc/systemd/network/12-bond0-add-eth.network <<EOF
[Match]
Name=e*
[Network]
Bond=bond0
PrimarySlave=yes
EOF
root@raspberrypi:~ # cat >/etc/systemd/network/16-bond0-add-wifi.network <<EOF
[Match]
Name=wl*
[Network]
Bond=bond0
EOF
root@raspberrypi:~ # cat >/etc/systemd/network/20-bond0-up.network <<EOF
[Match]
Name=bond0
[Network]
# to use static IP (with your settings) toggle commenting the next 4 lines.
DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
root@raspberrypi:~ # exit
pi@raspberrypi:~ $
今度は再起動します。
RasPiが新しいIPアドレスを取得する可能性があるため、sshとの次の接続のためにそれを確認する必要がある場合があります。
次に、ボンディングのステータスを確認できます。
pi@raspberrypi:~ $ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 500
Up Delay (ms): 1000
Down Delay (ms): 1000
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:27:eb:53:bd:de
Slave queue ID: 0
Slave Interface: wlan0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: b8:27:eb:06:e8:8b
Slave queue ID: 0
テストボンディング:上記のボンディングステータスで、Currently Active Slave:
が変化し、MII Status:
ダウンしていることがわかります。
ヘッドレスの場合は、down
両方のインターフェイスを一緒にしないでください;-)
pi@raspberrypi:~ $ ip addr
pi@raspberrypi:~ $ sudo ip link set eth0 down
pi@raspberrypi:~ $ sudo ip link set eth0 up
pi@raspberrypi:~ $ sudo ip link set wlan0 down
pi@raspberrypi:~ $ sudo ip link set wlan0 up
wlan0を設定した後は、しばらくお待ちください。ルーターに再接続してボンディングを管理するのに時間がかかる場合があります。今回ssh
は動作しません。
ボンディングの詳細については、動的ネットワークフェイルオーバーでイーサネットよりもwifiを優先するをご覧ください。
古いものをパージします。
pi@raspberrypi:~ $ sudo apt --autoremove purge openresolv
pi@raspberrypi:~ $ sudo apt --autoremove purge ifupdown
pi@raspberrypi:~ $ sudo apt --autoremove purge dhcpcd5
pi@raspberrypi:~ $ sudo apt --autoremove purge isc-dhcp-client isc-dhcp-common
参照:
[1] /usr/share/doc/systemd/README.Debian.gz
[2] man systemd.netdev
[3] man systemd.network
[4] https://wiki.debian.org/Bonding
[5] https://www.kernel.org/doc/Documentation/networking/bonding.txt
DNS=192.168.1.1
を追加することで問題を解決できました/etc/systemd/network/04-eth.network
。(私は静的IPの設定を使用しています)…
@Ingoからの回答を詳しく説明するには、リンクの使用を検討してください
ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
へのリンクの代わりに/run/systemd/resolve/resolv.conf
。これにより、「統合された」DNSスタブが有効になり、非パブリックエントリを持つ独自のDNSサーバーを提供するVPNを使用する場合に重要になる可能性があるインターフェイスごとのDNSサーバーなどが有効になります。