Friday, February 11, 2005

利用Debian 的 ifupdown來做到根據不同的Gateway設定不同的網路組態

買了新的notebook就開始想弄一些有的沒有的
所以了這篇心得

================終極目標=====================
當我接上網路線的時候...
電腦會自動幫我檢查我的網路線接到那
然後把IP設定好...
=============================================


在debian下有個很好用的ifupdown的機制
就是你把某個interface的相關ip設定寫在
/etc/network/interfaces
ex:

iface eth0 inet dhcp

這樣當你輸入
ifup eth0
他就會把你把eth0用dhcp來連上網路

當然他也可以使用static IP
ex:
iface eth0 inet static
address 192.168.0.100
netmask 0xffffff00
gateway 192.168.0.1

而當你想要把這個interface關掉時
輸入
ifdown eth0
就可以了

====================稍微進階分隔線=====================

如果你以為ifupdown只有上面那些東西
那你就錯了
他可以幫你在把某個interface啟用之前先執行一些指令

iface eth0 inet dhcp
pre-up /usr/local/bin/print_cch_is_bigbig

如此ifup便會在把eth0啟動前去執行/usr/local/bin/print_cch_is_bigbig
另外也可以使用up,down
iface eth0 inet static
...
up route add -host x.x.x.x y.y.y.y
down route del x.x.x.x

這個應該就很好懂了就是在ifup的時候跑route add, ifdown時跑route del


===================我很無聊分隔線=====================

我為了方便花了一些時間做這個...(嗚...我的論文阿...>
我為了方便花了一些時間做這個...(嗚...我的論文阿...>
首先我想要讓我的系統在eth0的網路線有插著的時候才可以啟動
所以我在eth0的設定時加了一行
iface eth0 inet static
pre-up [ `ifconfig eth0 up; ifconfig eth0 |grep RUNNING` != "" ]

上面這個意思就是先把eth0啟動(此時可能沒有IP)
然後去檢查ifconfig eth0產生的message裡面有沒有RUNNING這個字
有代表網路線有接起來, 這時ifup才會把eth0啟動










只有這樣嗎?!!!!!
那你太小看一個深夜孤單男子的潛力了
請想像在半夜的時候, 有個男人很孤獨的坐在桌前
整個世界裡陪伴他的只有他面前的notebook
他將雙手舉起...開始讓notebook響起了如同機關槍似的聲響
背景請配上The Phantom of the Opera出場的音樂 XD

..............
好吧 我真的很無聊

我為了能夠讓我的nb自動判斷我在家裡還是lab
所以我繼續利用了interfaces這個設定檔裡面的mapping的功能
首先我在裡面加了下面這兩行

mapping eth0
script /usr/local/bin/get-lan-gw-mac

就是說eth0他會利用/usr/local/bin/get-lan-gw-mac的stdout來做mapping
而/usr/local/bin/get-lan-gw-mac這個程式會幫我獲得
我所接上的Gateway的MAC address
然後印在stdout



例如我在實驗室的gateway為192.168.0.1 MAC是00:02:B3:33:DD:BA
所以設定如下

mapping eth0
script /usr/local/bin/get-lan-gw-mac

iface 00:02:B3:33:DD:BA inet static
address 192.168.0.22
netmask 0xffffff00
gateway 192.168.0.1


這樣eth0如果接到我實驗室的gateway上..就會把IP設成192.168.0.22
我另外也寫了一個家裡adsl的

iface 00:30:88:00:58:8b inet static
address 61.64.162.XXX
netmask 0xffffff00
gateway 61.64.162.254

這樣他就可以利用Gateway的MAC address來決定用那個設定

但是 問題來了
要怎麼拿到Gateway的MAC address
大致上我是利用arping這隻程式來做arp level的ping的動作
所以跑起來有點慢
不過因為interface不多我還可以接受
script在下面 我也懶得解釋
有興趣的人可以拿去看看
希望有人能幫我改進啦...XD

====================================================================

#!/usr/bin/perl

$IFACE = $ARGV[0];

if (`ifconfig $IFACE up;ifconfig $IFACE |grep RUNNING` eq "") {exit 1;}

$MAC = "";

my %gateways;

my $use = 0;

my $address = "";
my $gateway = "";

open ETCIFACES,"
while (){
if (/iface/){
if (/iface ..:..:..:..:..:../) {
$use = 1;
$address = "";
$gateway = "";
next;
}else { $use = 0;}
}
next if ($use == 0);
if (/address\b*([^\b]*)/){
$address = $1;
}
if (/gateway\b*([^\b]*)/){
$gateway = $1;
}
if ($gateway != ""){
chomp $gateway;

chomp $address;
$gateways{$gateway} = $address;
}
}
close ETCIFACES;

for $i (keys %gateways){
$MAC = `arping -c 1 -S $gateways{$i} -i $IFACE $i|grep from`;
$MAC =~ s/60 bytes from ([^ ]*) .*/$1/;
last if ($MAC ne "");
}
print $MAC;

exit 0;

==================================================================


呼呼...我真的是太無聊了....
因為...
世界上有一種東西叫做dhcp................................

Friday, February 04, 2005

2005/01/31 娃娃出嫁

娃娃是我的表姊
她在2005/01/31這天出嫁
在此祝他永遠幸福快樂 :)


早上9:00多我媽就打電話給我要我趕快去
因為早上她們是在女方家裡有一些儀式
可是我還是摸到10:00才出門...XD
到了表姊家 我居然是最後一個錄感謝辭的 :$

壓軸的當然不能漏氣...
我在恭喜她們之外...
也鼓勵了一下其他表姊趕快嫁一嫁 =.=
我們家到現在才嫁出去一個女生...orz
再跟爸媽敬茶的時候
我表姊跟我舅媽哭的西哩花拉的
在場的其他表姊也很多都哭了...
真的蠻感傷的...
不過因為是喜事...大家都要一直說這是喜事阿...要笑

下午變成跟男方去教堂
可是...全部講台語...@_@
聽到台語的誓詞時
我有點傻住....=.=

"哩萬異己系郎愛丟伊嗎"
"哇萬億"


晚上男方請101宴會廳
相當高級...菜色也不錯...
只是聽說不便宜...:P


這裡有四個美女的合照