2007年2月4日

FON bridge mode GoGoGo

話說前鎮子有FON的優惠活動,我在一開始時對FON並沒有太大的興趣,
有一天,我想到宿舍如果放一台FON AP,好像還不錯。
反正是學校的網路,要用就用吧,我又不痛不癢~

因此開始詢問FON的情況,等了許久,在前鎮子開始了FON台灣的促銷,
統一價165,當時我還覺得有些貴,這麼小一顆,
只有一個網路孔,沒有內建HUB,硬體應該是不怎麼樣吧~

不過當時在朋友的慫恿下,買了2顆,一顆按計畫放宿舍,
另一顆考慮放家裏或學校實驗室~~

FON陸續到貨了,第一顆我很乖的放宿舍,很乖的按照設定設定它。

但是第二顆呢.....嘿嘿嘿.........

因為本來家裏使用FreeBSD當NAT和AP,
不過因為主機板很舊的關係(P2-350),對PCI和wireeless PCI支援不很好,
插三張網路卡,經常發生device timeout或watchdog timeout,
尤其是插上wireeless PCI之後,情況尤其嚴重~~
加上PCI的wireeless card訊號實在不大強,還掏錢幫它加天線,還滿囧的~

這次第二顆,就打算放家裏用用看,也玩玩看,
因為我始終相信,機器在手上,怎麼可能沒有人在惡搞它~~

因為在宿舍使用的經驗,發現它的穩定度很不錯,速度也很好,
在家裏相信也會有不錯的表現,可惜的是,沒有bridge mode..... :(

上網路一查,赫然發現,人人都在惡搞它,透過CGI的bug,
很簡單就能把SSH打開,一進去,發現是Linux 2.4,
再仔細查找後,發現它硬體還不錯,看看下面這篇:
http://www.dd-wrt.com/wiki/index.php/La_Fonera_Hardware_Specifications

它用的是Atheros的MIPS SoC Processor,
直接內建ath的802.11b/g和10/100M的網卡,
難怪它的穩定性和效率都相當好~
而顆Processor的時脈也不低,
還內建了8MB Flash和16MB RAM,這相當不錯~
就165而言非常划算~~

在這裡,我僅把我的心得po出來,
先聲明一點,我只是「正常的使用它內建的功能」,「並沒有惡意的破壞它」,
不過,這裡指的「惡意破壞」,指的是把Flash ROM刷掉........ = =||
套個不文雅的說法,就是蓋棉被純聊天,頂多摸一摸罷了(真低級的比喻)....... = =||

我的需求很簡單,和芸芸眾生一樣,我只想要讓FON有bridge的功能,
一個NAT已經很發瘋了,還NAT中的NAT勒..... = =||

要做到這點,第一步驟是把FON的SSH功能「打開」(我絕對沒有破壞它,只是打開而已),
看了些說明之後,發現
這裡的解說

搭配
這裡的程式

是安全性最高的,基本上不需要太擔心把它搞壞,我們只是不小心設個IP,
不小心點了兩個.xml網頁罷了~~

這邊要注意的是,在將SSH功能打開之後,按照前面解說的網頁,
它會在重新開機或下載更新之後還原,
解決的方法在這裡
Always Open~FON SSH

從網頁我們可以得到一個重要資訊,
/etc/config在自動更新之後,是不會蓋掉的~~

因此,我們除了可以讓FON像7-11一樣,FON SSH天天營業,
我們也可以做些其他事情,像是幫我們把「更新程式」在FON更新後自動放回去~

而第二步驟,就是把FON的bridge功能「打開」,
我在這邊要嚴正的正名一下,FON的bridge功能,是本來就有的,
並沒有額外增加patch或module,因此談不上「破壞機器」~

在Linux上要把bridge功能弄起來很麻煩,
不像FreeBSD改改sysctl就搞定了.... :(

基本上我們可以參考
Mini HOWTO:Ethernet Bridge + netfilter

這邊會解釋Linux上bridge的設定方式。

而簡單的說,步驟如下:
1.建立 beidge interface(br0)
2.把要bridge的幾張網路介面加入br0(eth0,eth1,ath0...etc)
3.如果需要讓bridge有IP可以讓人連線,幫br0設個IP
4.把br0啟動

大功告成~~

在FON上也是一樣的,參考網頁:
http://mrmuh.blogspot.com/2006/11/updates-explained-and-bridging-mode.html

裡面有提供N15bridge的設定用script檔案

瀏覽後會發現,它的流程和上面說得有些類似,但加了些東西,大流程如下:
1.關閉DHCP(Server和Client)
2.如上設定Bridge
3.設定內部無線網路的ath1介面
4.設定外部無線網路的ath0介面

我在使用時,hostapd一直沒有成功跑起來,因此改使用
iwconfig直接設定,直接用WEP的認證,而不使用wpa了~~

我的script如下:
#!/bin/ash
echo "Setting up LAN bridge"
# 將 DHCP server 和 DHCP client 停止
/usr/bin/killall dnsmasq
/usr/bin/killall -9 udhcpc

# 建立 bridge interface
/usr/sbin/brctl addbr br0
/usr/sbin/brctl stp br0 off
/usr/sbin/brctl setfd br0 0

# 將 eth0 和 ath1(有線 / 無線) 設定清除
/sbin/ifconfig eth0:1 down
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig ath1 0.0.0.0

# 啟動 bridge interface
/sbin/ifconfig br0 up

# 將 eth0 和 ath1(有線 / 無線) 加入到 bridge interface
/usr/sbin/brctl addif br0 ath1
/usr/sbin/brctl addif br0 eth0

# 設定 bridge interface 的 IP(udhcpc為DHCP / ifconfig為手動)
/sbin/udhcpc -i br0 -R # get new IP via dhcp
#/sbin/ifconfig br0 192.168.0.103 # static IP

# 設定防火牆, 允許 bridge interface 的 Input / Output
iptables -A INPUT -i br0 -j ACCEPT
iptables -A OUTPUT -o br0 -j ACCEPT

# add bridge to hostapd.conf and restart hostapd (allows to use WPA)
# 原指令為執行 hostapd 來啟動 ath1 的 AP
# 改為直接用 iwconfig 來啟動
# 因為 hostapd 不熟不清楚設定,hostapd 能支援 wpa...等認證
[ `grep -c bridge=br0 /tmp/hostapd.conf` = "0" ] && echo bridge=br0 >> /tmp/hostapd.conf
/usr/bin/killall killall hostapd
#/usr/sbin/hostapd -B /tmp/hostapd.conf
/usr/sbin/iwconfig ath1 essid HOME mode Master key xxxxxxxxxxxxxxxxxxxxxxxxxx(麻煩請自己取)

# restart public SSID (doesn't work!)
# 重新啟用 FON 的開放連線, 不確定能否使用, 看起來是不能
/sbin/ifdown hotspot
/sbin/ifup hotspot


我們先把它存成/tmp/test.sh,執行看看能不能跑。

確定是ok的,我們把它移到/etc/init.d/讓它在開機時能自動執行,步驟如下:
chmod 755 /tmp/test.sh
mv /tmp/test.sh /etc/init.d/N15bridge


重開機之後,等一陣子,得到了相同的效果,表示我們成功了~~ :D

沒有留言: