- - PR -
DHCPサーバでの設定の上書き
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-31 17:29
こんにちわ.
ちょっと待ち時間に手元(実は構築作業中)の Linux で検証してみちゃいました. ※作業員さんゴメンナサイ. で,/etc/sysconfig/network はまったく無視されました.が,他に方法は見つけてみました.ただし,RedHat Enterprise Linux なのでどこまで皆さんの環境に match するか判りませんのでそのつもりで読んでください. 結論から言うと, /etc/sysconfig/network-script/ifup.eth0 という file に route command が書かれていると,/etc/sysconfig/network が流れる際に 読んでくれるようです.ここに route del default route add default gw "変更後の ip address" と書いてやると,script が流れた後の default gateway は "変更後" の方になってました.近場に訊いたところ,/etc/sysconfig/network-script/route-eth0 に書けば良いらしい話もありましたが,こちらだと「追加は出来る」ようでした.単に「削除ができる」やり方が判らなかっただけですが... 断線後の回復や rease 待ちの検証などはしてませんが,とりあえずご参考までに. | ||||||||||||
|
投稿日時: 2004-07-31 19:39
おはようございます^^; コメントつけた後、気がついたらダウンして寝ておりました。起きたら夜なんですが…(苦笑)
# またコメントできてうれしく思います(^^)
dhcpcdの動作について簡単にテストしました。まず、最初に… /etc/dhcpc/dhcpcd-<interface>.exe IP アドレスの変更を検出した時に dhcpcd が 実行しようとするファイル。 …は、存在しないようです^^; どうやらVineのマニュアルが間違っているようですね^^;;;;; 実際、ソースも確認したのですが、やっぱりなさげでした(苦笑) 代わりに、「-c」オプションと「/etc/dhcpcd.exe」はソース上にて健在で、こちらはどちらも動作することを確認しました。 次に、「dhcpcd-<interface>.info」ファイルの検証をしたのですが、これはどうやっても「gateway」に反映できませんでした。 具体的には… 1.renew(dhcpcd -n) → Default Gateway変わらず 2.renew(dhcpcd -n) ※Default Gatewayを削除して実行 → Default Gateway追加されず 3.release → rease(dhcpcd -k, dhcpcd) → 「.info」ファイルがdhcpサーバの情報で更新されます^^; 簡単に実現するなら「/etc/dhcpcd.exe」を作ってしまうのが手っ取り早いかと。ただし、NIC2つでDHCPとか利用すると問題が出るかも知れません^^; それと、ifdown時にも実行されるのが気味が悪いですね。他には推奨されないオプション「-c」を利用する手もあります。この場合は「/etc/sysconfig/network-scripts/ifcfg-eth0」に「DHCPCDARGS」を追加して、ifupを修正する必要があります。(VineのifupはDHCPCDのコマンドパラメータを受け渡すときのスクリプト処理にバグがあるようで、何故か「DHCP_HOSTNAME」でパラメータを塗りつぶしてしまいます^^; なので、以下の方法で修正しておかないとDHCPCDにパラメータを渡す処理が必要な場合うまく動作しません)dhcpcdによってntp.confを書き換えられて困っている人にも、この修正はおすすめします。 ↓ifcfg-eth0(「-N」はntp.confの非書き換え) DEVICE="eth0" BOOTPROTO="dhcp" ONBOOT="yes" DHCPCDARGS="-N -c /etc/dhcpc/dhcpcd-eth0.exe" ↓ifup(だいたい、150行目あたり) if [ -n "${DYNCONFIG}" ]; then PUMPARGS=$PUMPARGS DHCPCDARGS="$DHCPCDARGS -n" if [ -n "${DHCP_HOSTNAME}" ]; then PUMPARGS="-h ${DHCP_HOSTNAME}" # Modified Youyu 07/31 2004 #DHCPCDARGS="-h ${DHCP_HOSTNAME}" DHCPCDARGS="${DHCPCDARGS} -h ${DHCP_HOSTNAME}" # Modified Youyu 07/31 2004 fi if need_hostname; then PUMPARGS="${PUMPARGS} --lookup-hostname" DHCPCDARGS="${DHCPCDARGS} -H" fi ↓/etc/dhcpc/dhcpcd-eth0.exe #!/bin/sh /sbin/route del default > /dev/null /sbin/route add default gw xxx.xxx.xxx.xxx metric 1 > /dev/null # タグのミス修正と、「/etc/dhcpc/dhcpcd-eth0.exe」を追加 ## kaz様のご指摘による「#!/bin/sh」を追加 [ メッセージ編集済み 編集者: 水無月 遊々 編集日時 2004-08-01 02:08 ] | ||||||||||||
|
投稿日時: 2004-08-01 00:55
こんばんわ.
なんとなく夜明かし体勢だったりします... また待ち時間があったので,ことのついでに dhclient を rpm -e して RHEL に dhcpcd を導入してみました.turbolinux の SRPM を rebuild してみました.
素のままでは /etc/dhcpcd.exe は読まれませんでした. で,
これで読んでくれるようでした.明示的に指定してやったほうが適切かもしれませんね. ただ,
#!/bin/sh は書いてあげたほうが良いかもです. 以上,ご参考までに. | ||||||||||||
|
投稿日時: 2004-08-01 02:07
こんばんは。
お疲れさまです。なんだか大変そうですが、お体には気をつけてくださいまし。
あれ? パッケージによって違うんですかね^^; Vineですと、以下の部分で呼ばれています。ちなみにバージョンは「1.3.21-pl2」です。 ↓dhcpcd.h(26行目から) #ifndef PACKAGE #define PACKAGE "dhcpcd" #endif #define PROGRAM_NAME PACKAGE ↓pathnames.h(29行目から) #define PID_FILE_PATH ""_PATH_VARRUN""PROGRAM_NAME"-%s.pid" #define DHCP_CACHE_FILE "/etc/dhcpc/"PROGRAM_NAME"-%s.cache" #define DHCP_HOSTINFO "/etc/dhcpc/"PROGRAM_NAME"-%s.info" #define EXEC_ON_CHANGE "/etc/dhcpc/"PROGRAM_NAME".exe" #define RESOLV_CONF "/etc/resolv.conf" #define NIS_CONF "/etc/yp.conf" #define NTP_CONF "/etc/ntp.conf" ↓client.c(1337行目から) /*****************************************************************************/ void execute_on_change(prm) char *prm; { if ( fork() == 0 ) { char *argc[6],ipaddrstr[16]; snprintf(ipaddrstr,sizeof(ipaddrstr),"%u.%u.%u.%u", ((unsigned char *)&DhcpIface.ciaddr)[0], ((unsigned char *)&DhcpIface.ciaddr)[1], ((unsigned char *)&DhcpIface.ciaddr)[2], ((unsigned char *)&DhcpIface.ciaddr)[3]); argc[0]=PROGRAM_NAME; argc[1]=IfName; argc[2]=prm; argc[3]=ipaddrstr; if ( DebugFlag ) argc[4]="-d"; else argc[4]=NULL; argc[5]=NULL; if ( execve(EXEC_ON_CHANGE,argc,ProgramEnviron) && errno != ENOENT ) syslog(LOG_ERR,"error executing \""EXEC_ON_CHANGE" %s %s %s\": %m\n",IfName,prm,ipaddrstr); exit(0); } }
ご指摘ありがとうございます。元文章に追加いたしました。 | ||||||||||||
|
投稿日時: 2004-08-01 03:11
こちらでは 1.3.22-pl4 でした. で,SRPM を開いてみました. dhcpcd.h は変りありませんでした.
同じ場所なんですけど... #define PID_FILE_PATH "%s"PROGRAM_NAME"-%s.pid" #define DHCP_CACHE_FILE "%s"PROGRAM_NAME"-%s.cache" #define DHCP_HOSTINFO "%s"PROGRAM_NAME"-%s.info" #define EXEC_ON_CHANGE "%s"PROGRAM_NAME".exe" #ifdef EMBED #define CONFIG_DIR "/etc/config/dhcpc" #define RESOLV_CONF "/etc/config/resolv.conf" #define NIS_CONF "/etc/config/yp.conf" #define NTP_CONF "/etc/config/ntp.conf" distribution の違いが現れてますね.これでは動かなくて当然です. client.c も随分違っているようです.patch が中ってました. 何も考えずにとりあえず rpmbuild --rebuild しただけだったので, その辺は全然無調整でした. 以上,ご報告まで. | ||||||||||||
|
投稿日時: 2004-08-01 22:16
わざわざお調べいただきありがとうございます。ヘッダを見る限りですが、Turbo Linuxのほうはプログラム内部でPathが展開されているようですね。 複数NICを考慮すると、「/etc/dhcpc/dhcpcd-<interface>.exe 」が自動実行される…というのが、ベストのような気がしますね。「-c」オプションは推奨されないようですし^^; パッチを作ろうかなぁ…と思ったんですが、あまり必要とされなさそうなので止めました^^; お忙しい中、ご報告ありがとうございました。 | ||||||||||||
|
投稿日時: 2004-08-01 23:56
全くの脱線なんですが...
なんじゃこりゃあ! って感じですね。 そりゃまあ argc と書いても間違いじゃないですが、execve には argv だろー、とゆーことで。 こういうしょーもないところで世間の習慣に反したことをすると、 混乱を招くとか可読性を損なうとか、ロクなことがないと思うですが... # これひとつだけならたいした問題でもないですが、こういうのを見ると # 一事が万事この調子なんじゃないかと疑ってしまうもので。 | ||||||||||||
|
投稿日時: 2004-08-02 17:52
皆さん、こんにちは。
水無月遊々さんの方法で当初の目的は果たせました。 ありがとうございます。 # その後の議論にはついていけてません |