[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:39359] <Summary> How to refresh network interfaces



柴田(あ)です。

山森さまの回答が直接の解決につながりました。
ありがとうございました。

In message <20040121035941.E765B17B946@arashi.debian.or.jp>
   "[debian-users:39339] <Q> How to refresh network interfaces"
   "Wed, 21 Jan 2004 12:59:44 +0900"
   "SHIBATA Akira <shibata@xxxxxxxxxxxxxx>" wrote:

> ■質問
> ネットワークインターフェースをリフレッシュ?する方法は
> どうしたらよいでしょうか?


■回答
/etc/network/interfaces が適切な状態で
/sbin/ifdown -a して /sbin/ifup -a すると
リフレッシュ(再起動後と同じ状態になりました)


■当初の質問より山森さんからのメイルで

In message <20040122.005125.846931846.h-yamamo@xxxxxxxxxxxxxxxx>
   "[debian-users:39341] Re: <Q> How to refresh network interfaces"
   "Thu, 22 Jan 2004 00:51:35 +0900"
   "Hiroyuki YAMAMORI <h-yamamo@xxxxxxxxxxxxxxxx>" wrote:

> 山森です。
-snip-
> 私ならこんな感じにすると思います。
> 通常時
>  ln -sf /etc/network/interfaces.normal /etc/network/interfaces
> 
> としておいて、スクリプトは、
> 
>  /sbin/ifdown -a
>  ln -sf /etc/network/interfaces.emergency /etc/network/interfaces
>  iptablesのルールの変更
>  /sbin/ifup -a

といただきまして、下のようにかきかえました。
1. インターフェースを落とす
2. リンク張りなおし
3. インターフェースあげ
4. iptables 設定 ( NAT )
このうち 2 は従来よりも美しくするためで直接的に
改善されたのは 1,3 ( /sbin/ifdown と /sbin/ifup )です。

元に戻すときも同じように
1. iptables 通常用にリセット
2. インターフェース落とし
3. リンク張りなおし
4. インターフェースあげ

ということで、希望通り数秒で切り替えができるように
なりました。
# あとは接続性を監視するようにする予定


$ head -n 20 /etc/network/emergency-routing.sh     <== 緊急時用スクリプト先頭
#!/bin/sh

# =======================================================================
# change default gateway

/sbin/ifdown -a
/bin/ln -sf /etc/network/interfaces.emergency /etc/network/interfaces
/sbin/ifup -a

# =======================================================================
# becoming a NAT router
IFOUTER=eth2
IFINNER=eth1
IPTABLES=/sbin/iptables

# =======================================================================
# INPUT/FORWARD チェインのポリシーの設定: DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP




=============================================== 当初の質問
> ■状況
> 下記のような接続を現在構築中です。
> 規模が小さいので AS 取得等は考えておりません。
> したがって BGP 等も考えておりません。
> それぞれの NAT の上位側までグローバルが振られてます。
> インターネット側から ISP1 経由で NAT1 を含む
> ネットワークへのアクセスがありますので一本に
> まとめる予定はありません。
> NAT1,2 及び router1 の装置は専用の装置であまり
> 賢くありません、というか自動で何かをさせることは
> 難しくたぶんできません。
> router2 は NIC を 3 枚いれて Debian ( woody ) で
> 構築しています。
> 
> 
> ●接続図
>  The Internet
>  |          |
> ISP1       ISP2
>  |          |
> router1     |
>  |          | eth0
>  +-------router2
>  |   eth2   | eth1
> NAT1       NAT2
>  |          |
>  +----+-----+
>       |     
>   社内ネット
> 
> 
> ■やりたいこと
> 何らかの理由で ISP2 経由でインターネットに
> 長時間(たとえば 5 分以上)接続不能に
> なったときに「非常用として」 ISP1 経由で
> 通信ができるようにしたい。
> ここで思い立ったのは router2 を NAT ルータに
> して( IPtables 利用) ISP1 経由で利用
> できるようにシェルスクリプト(下に添付)を書いて
> 切り替えられるようにしたい。
> スクリプト中では /etc/network/interfaces を
> コピーして /etc/init.d/networking restart を
> 一応念のため sleep2 を入れて二回繰り返してます。
> ちょっと待ってから iptables に入ってます。
> 
> 
> ■できたこと
> 切り替えはできて通信もできるようになりました。
> 非常用←→通常用の切り替えもうまくいっているように
> 見えます。
> traceroute かけると ISP1 経由(非常時想定)、
>  ISP2 経由(通常時想定)の切り替えはできています。
> 
> 
> ■問題点
> ルーティングテーブル?元に戻らないので気持ちわるいです。
> 下記のような感じでデフォルトルートが二つあります。
> よくみると通常時想定と非常時想定で default の gateway の
> アドレスの最後にドット「 . 」がくっついているのがわかりますが
> こんなんでいいのかが検索してもわからなかったのです。
> つまり、動作はほぼ期待通り(例外は下に)、ですがキモチ悪いことに
> なっております。
> 
> 
> (通常時想定の状態)
> $ netstat -r
> Kernel IP routing table
> Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
> 211.XX.XXX.XXX  *               255.255.255.252 U        40 0          0 eth0
> 218.XX.XXX.XXX  *               255.255.255.224 U        40 0          0 eth2
> 210.XXX.XXX.XX  *               255.255.255.192 U        40 0          0 eth1
> default         211.XX.XXX.XXX. 0.0.0.0         UG       40 0          0 eth0
> default         218.XX.XXX.XXX  0.0.0.0         UG       40 0          0 eth2
> 
> (非常時想定の状態)
> $ netstat -r
> Kernel IP routing table
> Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
> 211.XX.XXX.XXX  *               255.255.255.252 U        40 0          0 eth0
> 218.XX.XXX.XXX  *               255.255.255.224 U        40 0          0 eth2
> 210.XXX.XXX.XX  *               255.255.255.192 U        40 0          0 eth1
> default         211.XX.XXX.XXX  0.0.0.0         UG       40 0          0 eth0
> default         218.XX.XXX.XXX. 0.0.0.0         UG       40 0          0 eth2
> 
> 
> ■参考:切り替えスクリプトの先頭
> $ head -n 20 emergency-routing.sh
> #!/bin/sh
> 
> # =======================================================================
> # =======================================================================
> # change default gateway
> /bin/cp ./interfaces.emergency ./interfaces
> /etc/init.d/networking restart
> sleep 2
> /etc/init.d/networking restart
> sleep 2
> 
> # =======================================================================
> # becoming a NAT router
> IFOUTER=eth2
> IFINNER=eth1
> IPTABLES=/sbin/iptables
> 
> # =======================================================================
> # INPUT/FORWARD チェインのポリシーの設定: DROP
> $IPTABLES -P INPUT DROP
> −以下略−
> 
> 
> ■動作の例外
> 接続図の状態から、起動して最初の通常状態はインターネットへの
>  traceroute をかけると NAT2 − router2 − ISP2 −インターネットと
> いうようになります。
> あるいは NAT1 のあるネットワークへ traceroute をかけると NAT2 −
> − router2 − ISP2 −インターネット− ISP1 − router1 − NAT1 と
> いうようになります。
> 
> 非常時想定では NAT2 − router2 − router1 − ISP1 −インターネットと
> いう状態で期待通りです。
> このとき NAT1 のあるネットワークへ traceroute をかけると NAT2 −
> − router2 − NAT1 とこれも期待通りです。
> 
> しかしいったん非常時を経験した今回の router2 (Debian router)は
> 通常時ルーティングに戻しても NAT1 のあるネットワークへ traceroute を
> かけると NAT2 − router2 − NAT1 となり最初とは違います。
> 
> この通常状態ではインターネットへの traceroute をかけると NAT2 −
> − router2 − ISP2 −インターネットというようになり、これは
> 期待通りといえます。
> 
> 
> 
> ■まとめ
> つまり、 netstat の結果(見たことのない状態)と、
> traceroute の結果が困った状態にはなっていないものの
> これでよいかどうかの確信が得られないので、
> ご相談したというわけです。
> 
> 再起動すれば元通りとは思いますが、実際に運用を開始
> したらそうそう再起動( 3 分くらいかかります)はしたくないので、
> 切り替えにはいったら、できれば数秒〜十数秒程度で終えられる方法を
> 探しています。
> 

-- 
SHIBATA Akira      ケーブルテレビはまちづくり
shibata@xxxxxxxxxxxxxx   phone : +81-429-74-3611