web-dev-qa-db-ja.com

コマンドラインからDHCPを無効にする安全な方法はありますか?

短縮版

私はこの質問が他の質問と非常に似ていることを知っており、実際に答えをインターネットで検索しましたが、アプローチが機能していないか、解決策が「ベストプラクティスになるには複雑すぎる」と思われます(説明しようと思います)。 コマンドラインからDHCPを無効にする方法(スクリプトで使用する)の安全な方法を探しています。

バックグラウンド

Ubuntu Server 12.04とremastersysで「Live-Cd」を作成しようとしています(うまく機能します)。システムは、デフォルトで、起動中にDHCPでIPを取得するように構成されています。それは大丈夫です-重要なことは、スクリプト(起動後に実行される)が(特定の場合に)ifconfignot/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パッケージを削除することを提案しましたが、これで問題は解決しますか?これは他のものを壊しますか?

これに対するコマンドは本当にありませんか?見落としただけでいいのですが。

4
Mister Henson

canの簡単な例を紹介しますが、完全な例ではありません。正確な設定、ニーズなどはかなり異なる可能性があります。

まず、このケースをより簡単にするためにいくつかの仮定を立てましょう。

  1. Network-managerを使用していません
  2. resolvconfを使用していないが、静的な/etc/resolv.confファイル
  3. インターフェイスファイルには、ケーブルが接続されていない/接続されている場合に再設定する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
3
Manwe

ディストリビューションで利用可能な場合は、「systemctl」を使用できます。これは私のopenSUSEディストリビューションで利用でき、次の方法でサービスを無効にするために使用します。

systemctl disable wickedd-dhcp4.service

ここで、wickedd-dhcp4は、システムでDHCPクライアント構成を処理するサービスの名前です。 IPv6 dhcp構成用のサービスもあります。これも無効にしないでください。

systemctl disable wickedd-dhcp6.service
1
Sahil Singh

次のコマンドを使用して、サーバーでDHCPを無効にします。

Sudo update-rc.d -f dhcp3-server remove

/etc/init.d/dhcp3-serverのシステム起動リンクを削除します。

そのため、次回の再起動時にDHCPは作動しません。

それだけです、シンプルで清潔、簡単で安全です。

0
meda

これを修正する最も簡単な標準的な方法は簡単です。特定のMACアドレスにどのIPを与えるかをDHCPサーバーに伝えるだけです。これまでに触れたすべてのルーターにはこの機能があり、dhcp3-serverを使用している場合は、 ちょうど同じように です。

0
Oli

単にpkill dhclientでdhcp-clientを停止するのはどうですか?

0
Clausi