eth0でDHCPサーバーとクライアントを切り替える

eth0でDHCPサーバーとクライアントを切り替える

私は腕のマイクロコントローラを使用しています。現在のコントローラは、eth0(イーサネットジャック)でdhcpクライアントとして構成され、eth1ではdhcpサーバーとして構成されています。 eth0でもdhcpサービスを提供するように設定してルータに接続するとクライアントになり、ラップトップ/ハブに接続するとサーバになるように設定したいと思います。コントローラがサーバーなのかクライアントなのか、フロントエンドで知ることができます。私はLinux開発に初めて触れたので、どうすればいいかわかりません。

/etc/udhcpd.confファイルを見ましたが、そこにインターフェイスeth0を追加する必要があるかどうかわかりません。また、/etc/networking/interfacesファイルとudhcpd.serviceファイルを調べましたが、何を修正するのかわかりません。 eth0でコントローラをサーバーまたはクライアントとして設定する方法についての指示を提供できますか?

詳細については、次のファイルの内容を参照してください。

/etc/udhcpd.config:

start       10.77.0.2
end         10.77.255.200
interface   eth1
opt dns 8.8.8.8 8.8.4.4 #public google dns servers
option  subnet  255.255.0.0
opt     router  10.77.0.1

/etc/network/interfaces:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

pre-up /bin/grep -v -e "ip=[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" /proc/cmdline > 
/dev/null
udhcpc_opts -R -b

iface eth1 inet static
address 10.77.0.1
netmask 255.255.0.0

udhcpd.service:

[Unit]
Description=udhcpd Service
After=startup.service

[Service]
ExecStartPre=/sbin/ifup eth1 
ExecStart=/usr/sbin/udhcpd -f -S /etc/udhcpd.conf
TimeoutSec=infinity

[Install]
WantedBy=multi-user.target

答え1

私が知っている限り、単一のudhcpdネットワークインターフェイスは一度に1つのネットワークインターフェイスしか提供できないため、eth0からDHCPも提供するには、別の設定ファイルを使用して2番目のコピーを実行する必要があります。たぶんそう呼ぶかもしれませんね/etc/udhcpd-eth0.conf

また、異なる場所に2つのコピーを配置したい場合があります/etc/network/interfaces。 1つは「DHCPクライアント」構成用eth0で、もう1つは「DHCPサーバー」構成用です。/etc/network/interfaces.eth0clientたとえば、それらを呼びましょう/etc/network/interfaces.eth0server

次の質問は、「eth0のDHCPサーバー」を明示的に「eth0のDHCPクライアント」に戻すまで、再起動後も永続的な永続状態と見なすか、「eth0のDHCPクライアント」をサーバーにするかです。要求に応じてアクティブになり、次回の再起動まで持続する一時的な状態で使用しますか?

udhcpd-eth0.serviceまた、一時モードを使用するには、無効にする必要がある別々の項目を定義する必要があります(=自動で始まらない)。永続モードが必要な場合は、サーバーモードに切り替えるときに有効にして起動し、クライアントモードに切り替えるときに停止して無効にする必要があります。

モードを継続的に切り替えるスクリプトは、次のことを行う必要があります(擬似コードで)。

  1. systemctl stop udhcpd-eth0; systemctl disable udhcpd-eth0。ここでエラーを無視してください。

  2. ランニングifdown eth0

  3. 切り替えたい状態に応じて現在の状態を/etc/network/interfaces使用または上書きします。/etc/network/interfaces.eth0client/etc/network/interfaces.eth0server

  4. ランニングifup eth0

  5. eth0からDHCPサーバーモードに切り替えるとsystemctl enable udhcpd-eth0.service && systemctl start udhcpd-eth0.service

  6. 完璧!

/etc/network/interfaces一時的な状態にしたい場合は、ファイルのコピーを2つ必要としません。この場合、スクリプトは次のようになります。

  1. systemctl stop udhcpd-eth0.service。停止している場合もそうでない場合もあります。ここではエラーを無視してください。

  2. ifdown eth0ip link set eth0 down(または古いifconfig eth0 downツールを使用している場合)を実行します。これらのコマンドの1つ以上がエラーを報告します。

  3. DHCP クライアントモードに切り替えると実行がifup eth0完了します。そうでない場合は、最初ipまたはコマンドを使用してifconfigDHCPサーバーモードで静的IPアドレスを設定してeth0から実行しますsystemctl start udhcpd-eth0

  4. 完璧!

「フロントエンドでスイッチスクリプトを呼び出すことは、読者の練習問題として残ります。」

関連情報