2010年8月27日 星期五

Snow Leopard Server設定PPPoE網路分享(2/3)



基本的網路配置和建置目的

建置目的


今天我們的主角依舊是Mac mini server,我希望將這台server設定成一台ADSL ip 分享器,讓內網中的Macbook air可以透過這台server連線出去,一來前端有server級的防火牆擋著,讓我的Macbook air的連線品質更佳有保障,二來Macbook air可以透過內網收看MOD,讓我工作之餘,可以休閒一下,三來我還可以讓Mac mini server 變成我的Time machine server,這樣Mac mini server 也不會枉費我辛苦在上面建置raid 1

網路配置


為了達成以上的訴求,網路的配置勢必是一個重要的環節,因為要完成以上的配置,在沒有架設好網路之前,一切都是空談。所以,底下說明架設之前的基本網路環境,我的網路配置如下圖:

螢幕快照 2010-08-27 12.28.44 AM.jpg


最左邊是ADSL modem,接著連到一個Hub,經由這個Hub,Mac mini server、Macbook air、Mod主機和一台無線AP可以同時和彼此連線,也就是透過local network。其中Mod和AP的網路配置基本上和這次要說明的主題無關,所以假設他們都設定完成。這樣最重要的是分別給Macook air和Mac mini server一個虛擬IP。

Mac mini server的ip為10.200.3.5,設定如下:
螢幕快照 2010-08-25 3.03.41 AM.png

而Macbook air的ip為10.200.3.3,路由器則設定為10.200.3.5,這樣Macbook air的對外連線都會從Mac mini server出去,設定如下圖所示:

螢幕快照 2010-08-25 上午2.42.38.png

為什麼要設定成10.200.x.x這個網域呢?因為我要收看Mod,必須在這個網域之下,如果比較了解網路的朋友,可以自行改成自己喜愛的虛擬ip位置。

好了,到這邊,基本的網路配置就設定好了,此時,Macbook air可以ping到Mac mini server,反過來也可以ping到,不過,Macbook air 還是不能上網,因為最重要的ip分享設定還沒完成,底下我們會仔細一個步驟一個步驟的說明。


Mac mini server PPPoE ip分享設定

連上PPPoE


既然要將PPPoE的網路分享出來,首先第一個步驟就是要在Mac mini server上使用PPPoE連上網路,設定方法很簡單,只要在"網路"中新增一個PPPoE的網路介面就可以了。連上網路之後,可以先ping看看www.google.com,試試看是否能正常連線到網路。之後我們所提到的任何指令,請在terminal中輸入,要開啟terminal,可以直接在spotlight中輸入terminal尋找:

螢幕快照 2010-08-27 11.47.37 PM.png

點選之後會出現在一個新的視窗:
螢幕快照 2010-08-27 11.50.24 PM.png

為什麼要使用terminal呢?因為之後我們需要用到很多指令來確認或執行一些程式,所以,這是個學習使用command line的好機會。

關閉NAT和DHCP


在確認PPPoE能連線之後,我們還要確認Mac mini server上的NAT服務是否已經關閉了,因為如果你和我一樣,之前為了測試設定NAT和DHCP,已經有用在Server admin中,將這兩個服務啟動了,這樣子之後我們的自行手動的設定,會被內建Server admin洗掉,所以,千萬要記得先將這兩個服務關掉。

螢幕快照 2010-08-28 12.06.15 AM.png

了解防火牆


原則上設定IP分享的成敗,就在於對防火牆的了解與否,常常設定不成功都是防火牆搞的鬼。所以,我們必須先知道防火牆是在那裡設定,其實在Mac mini server上點開Server admin就會看到Firewall的選項了,接著點選Active rule,如下圖所示:

螢幕快照 2010-08-28 12.19.35 AM.jpg

我們可以在active rule中看到目前的防火牆設定,這些設定決定了哪些封包可以通過,哪些封包不能通過。所以有任何服務啟動了,但是不能使用,請到這邊確認,是否是防火牆擋掉了。

當然如果你想在command line底下輸入指令查詢的話,可以輸入:

$ sudo ipfw list


你會看到如下的資料:

螢幕快照 2010-08-28 12.34.35 AM.png

從上圖我們可以看到,Snow leopard預設就先deny掉了很多的ip來源,原則上除非你有開放,不然他是全部封掉。所以,才會發生明明服務有開啟,但是卻怎麼都連不上線的情況。

設定ip分享



接下來就重點了,我們要正式開始在Mac mini server上設定ip分享了,還記得之前上一篇中我有貼一些連結給大家參考,其實這些文章中提到的語法都是正確的,只是可能會有一個防火牆的設定必須注意,因為有可能是自己不小心將封包擋掉了。底下我先說明基本的ip分享設定,主要如下圖所示:

螢幕快照 2010-08-28 12.51.55 AM.png

在上圖中,我們用su切換成root的身份,接著輸入sysctl -w net.inet.ip.forwarding=1

讓我們的ip可以轉送封包,然後輸入natd -interface ppp0,讓ppp0這個介面可以使用nat分享ip,最後輸入
ipfw add 00009 divert natd ip from any to any via ppp0,
讓轉送封包的防火牆設定,寫入目前的防火牆規則中,所以簡單整理如下:

$ su
# sysctl -w net.inet.ip.forwarding=1
# natd -interface ppp0
# ipfw add 00009 divert natd ip from any to any via ppp0


為什麼在第四個的防火牆規則中,我要將優先權設定為00009呢?因為我想讓這個規則優先處理,不然很有可能會被其它的規則蓋掉,如果你很了解ipfw,其實這裡可以不用設定優先權。

好啦,這個時候應該可以切換到另外一台電腦上,試試看能不能連線出去了,我是在Macbook air上ping出去。原則上,輸入上面這些指令就能讓內網的其他電腦連線出去,但是,事情沒有這麼單純,我還是沒辦法連線,我再次使用ipfw list,找到了一個驚人的發現,在最後一行,我看到了:

65534 deny ip from any to any


這一行真的是致命傷丫,如果這行一直存在防火牆規則中,那封包就會一直轉送不出去,所以我們只要將這條規則刪去,那PPPoE就能正常分享網路了。刪除的指令如下:

$ ipfw delete 65534


萬一我不想分享ip了怎麼辦?那就將之前提到的指令反過來執行:


sysctl -w net.inet.ip.forwarding=0
ipfw delete 00009
natd_id=$(ps -ax |grep 'natd -interface'|grep -v 'grep' |awk '{print $1}')
kill $natd_id


第一行是關閉ip轉送功能,第二行是把防火牆規則移除,第三行則是找到nat程式的pid,第四行將nat程式關閉。


後記



好啦,這樣你就知道怎麼將PPPoE網路分享給內網的使用者啦。什麼!!!你跟我一樣懶得記這些指令丫,那你到下面連結下載我編寫好的shell script。

http://macmini-code.googlecode.com/files/share_ppp_v1.0.sh.zip

下載解壓縮之後,輸入以下指令開啟PPPoE分享
$ sudo sh share_ppp.sh start


輸入以下指令關閉PPPoE分享
$ sudo sh share_ppp.sh stop


輸入以下指令重啟PPPoE分享
$ sudo sh share_ppp.sh restart


如果懂得shell script的朋友,可以打開來研究一下,這個程式還很粗糙,不過還算堪用,不過有時候要多restart幾次,PPPoE就能正常分享網路了。

4 則留言:

koli 提到...

你好
請教您一個問題
我也在MAC上利用VLC來看MOD,
雖然我已經把乙太網路放在第一順位了,但是只要我用另外一種方式連上網路.VLC就不會用乙太那張網卡去收MOD訊號了,
請問您怎樣把MOD的訊號設定在由乙太網路那張網卡接收呢?

hdj 提到...

因為mod是用multicast的方式傳送給內部網路,當你用另外一種方式連上網路,假設是pppoe好了,那你所有的multicast封包,都會透過pppoe取得,這樣就無法正常收看mod。我的作法則是完全透過乙太網路連線,就如同這篇文篇的教學,自行在10.200.3.x這個內部網路中架設router,對外的連線會透過10.200.3.5這台機器轉送出去,而要收看mod則是透過multicast,從10.200.3.x這個內部網路取得。

如果你懶得架router的話,就要看mod的時候將另外一種連線關掉,選好頻道再重新連線。

koli 提到...

瞭解,原來你是用這種方式解的.
剛剛研究了一下,不做router的話,直接在自己的電腦切route也行.
用 route add 強迫VLC由乙太網路那張吃DATA,其他的連線由PPPoe or airport 連出. and it's work~~~現在可以一邊上網一邊看MOD了.thanks for the talking~

hdj 提到...

哈哈,也謝謝你提供的意見,你的方法我試了一下,也成功了。
我是下這個指令:

sudo route add -net 224.0.0.0/4 -interface en2

需要修改的就是介面en2,我MBA的有線網卡為en2。早知道這麼簡單可以解快,我就不用另外架一個router,謝謝提供資訊。^_^

Related Posts Plugin for WordPress, Blogger...