私は腕のマイクロコントローラを使用しています。現在のコントローラは、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
また、一時モードを使用するには、無効にする必要がある別々の項目を定義する必要があります(=自動で始まらない)。永続モードが必要な場合は、サーバーモードに切り替えるときに有効にして起動し、クライアントモードに切り替えるときに停止して無効にする必要があります。
モードを継続的に切り替えるスクリプトは、次のことを行う必要があります(擬似コードで)。
systemctl stop udhcpd-eth0; systemctl disable udhcpd-eth0
。ここでエラーを無視してください。ランニング
ifdown eth0
。切り替えたい状態に応じて現在の状態を
/etc/network/interfaces
使用または上書きします。/etc/network/interfaces.eth0client
/etc/network/interfaces.eth0server
ランニング
ifup eth0
。eth0からDHCPサーバーモードに切り替えると
systemctl enable udhcpd-eth0.service && systemctl start udhcpd-eth0.service
完璧!
/etc/network/interfaces
一時的な状態にしたい場合は、ファイルのコピーを2つ必要としません。この場合、スクリプトは次のようになります。
systemctl stop udhcpd-eth0.service
。停止している場合もそうでない場合もあります。ここではエラーを無視してください。ifdown eth0
ip link set eth0 down
(または古いifconfig eth0 down
ツールを使用している場合)を実行します。これらのコマンドの1つ以上がエラーを報告します。DHCP クライアントモードに切り替えると実行が
ifup eth0
完了します。そうでない場合は、最初ip
またはコマンドを使用してifconfig
DHCPサーバーモードで静的IPアドレスを設定してeth0
から実行しますsystemctl start udhcpd-eth0
。完璧!
「フロントエンドでスイッチスクリプトを呼び出すことは、読者の練習問題として残ります。」