私はこの質問が他の質問と非常に似ていることを知っており、実際に答えをインターネットで検索しましたが、アプローチが機能していないか、解決策が「ベストプラクティスになるには複雑すぎる」と思われます(説明しようと思います)。 コマンドラインからDHCPを無効にする方法(スクリプトで使用する)の安全な方法を探しています。
Ubuntu Server 12.04とremastersysで「Live-Cd」を作成しようとしています(うまく機能します)。システムは、デフォルトで、起動中にDHCPでIPを取得するように構成されています。それは大丈夫です-重要なことは、スクリプト(起動後に実行される)が(特定の場合に)ifconfig
(not/etc/network/interfacesを使用して静的IPを設定できることです。 ):
ifconfig eth0 192.168.0.1
実際にはこれも機能していますが、IPは、以前に取得したリースのDHCPリース時間が終了するまでしか持続しません。新しいIPがeth0に割り当てられ、(要するに)システムが破壊されます。 「大したことはない、きっと次のようなものがあるだろう」と思った。
ifconfig eth0
dhcpdisabled
しかし、私はそれを認識しました、それはそれほど簡単に機能しません。 /etc/network/interfaces
の編集は、remastersys(実際にはcasperの23networkingスクリプト)によって生成されるため、少し注意が必要です。
書き換えてネットワークを再起動できますが、アクティブなdhclient.leasesはどうなりますか? DHClientは引き続きバックグラウンドで実行されます(そうすべきではありませんが、 一部の投稿では、 私のテストでは、dhclientが強制終了された場合、「ランダムに」再起動されることが示されました)、dhclient.leasesファイルを削除または空にする必要がありますか?resolv.confはどうですか?
要約すると-私の意見では、それは実際には「簡単」ではなく、「安定感」もありません。 この質問(156183) dhclientパッケージを削除することを提案しましたが、これで問題は解決しますか?これは他のものを壊しますか?
これに対するコマンドは本当にありませんか?見落としただけでいいのですが。
canの簡単な例を紹介しますが、完全な例ではありません。正確な設定、ニーズなどはかなり異なる可能性があります。
まず、このケースをより簡単にするためにいくつかの仮定を立てましょう。
resolvconf
を使用していないが、静的な/etc/resolv.confファイルallow-hotplug
行が含まれていません。ヘルパー変数DEVをセットアップしましょう
## your device is eth0
# stop /etc/interface control of the eth0 device, should also stop/kill dhcp for that device
ifdown eth0
## stop dhclient to be sure, don't worry about leases files etc
pkill dhclient
## ubuntu precise calls dhclient with dhclient3
pkill dhclient3
# set ip manually: (NETMASK is quite often 24 == 255.255.255.0)
ifconfig eth0 up 192.168.0.1/NETMASK
# do you need default gw? (for this example it's 192.168.0.254)
route add default gw 192.168.0.254
## if your /etc/resolv.conf is incorrect add correct nameserver like this:
### 8.8.8.8 = goole open dns
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
仮定1)がfalseの場合(ネットワークマネージャーを停止):
stop network-manager
仮定2)の場合、resolvconf
を削除するか、シンボリックリンクである場合は/etc/resolv.conf
を削除し、静的ファイルに置き換えます。
[ -h /etc/resolv.conf ] && rm /etc/resolv.conf
仮定3):ホットプラグの行をコメントアウトする必要があります。
Perl -i -pe 's/^(\s*allow-hotplug)/# $1/g' /etc/network/interfaces
ディストリビューションで利用可能な場合は、「systemctl」を使用できます。これは私のopenSUSEディストリビューションで利用でき、次の方法でサービスを無効にするために使用します。
systemctl disable wickedd-dhcp4.service
ここで、wickedd-dhcp4は、システムでDHCPクライアント構成を処理するサービスの名前です。 IPv6 dhcp構成用のサービスもあります。これも無効にしないでください。
systemctl disable wickedd-dhcp6.service
次のコマンドを使用して、サーバーでDHCPを無効にします。
Sudo update-rc.d -f dhcp3-server remove
/etc/init.d/dhcp3-server
のシステム起動リンクを削除します。
そのため、次回の再起動時にDHCPは作動しません。
それだけです、シンプルで清潔、簡単で安全です。
これを修正する最も簡単な標準的な方法は簡単です。特定のMACアドレスにどのIPを与えるかをDHCPサーバーに伝えるだけです。これまでに触れたすべてのルーターにはこの機能があり、dhcp3-server
を使用している場合は、 ちょうど同じように です。
単にpkill dhclient
でdhcp-clientを停止するのはどうですか?