Search Google

Sunday, September 27, 2015

[How-To] 在Mac OSX下使用雙網卡連內外網

今天要跟各位捧有們分享如何在Mac OSX下使用雙網卡同時連上內外網
是的, 我已經聽到各位心中的疑惑 -- 這麼簡單的事情也需要你來分享?!
沒錯, 在Windows / Linux下只需要透過route add / route delete的指令就可以辦到, 但是在Mac OSX中我試過了就是不管用, 上stackoverflow發問還被標負評, 在這裡先向以前被我不相信的捧油們說聲抱歉!

好的, 在Mac OSX下揪竟要下什麼指令才能夠達成使用雙網卡同時連上內外網呢?
當然route add還是需要的, 只不過在Windows / Linux下使用的route delete就要改成route flush...
WTF?! route的manual裡的說明看起來delete跟flush明明是一樣的作用, 只不過delete只刪一個routing gateway而flush是把整張routing table中的gateway設定全部清掉, 如下圖:

圖一

以下是實驗的結果
首先先讓Mac同時連上LAN與WiFi, 從下圖可以看到LAN (en5)與WiFi (en0)同時都在連線
圖二
192.168.0.1是家中的寬頻分享器, 192.168.43.1則是手機分享出來的WiFi熱點, 我們先用ping看看Internet與Intranet的連線狀況
圖三
很好, 都有通, 因為二者都能上Internet所以用traceroute檢查到底是走一張網卡出去
圖三之一
很不幸, 剛才走的en5, 這樣完全沒有達到雙網卡的目的
為了要確定Internet的traffic是從en0出去, 我們先用route delete指令將en5的default routing拿掉
route delete -net 0.0.0.0 192.168.0.1
於是routing table變成下圖的樣子, default routing通通走到en0去
圖四
這時候完全ping不到google >"<
圖五
如果我們改用route flush呢?
route -n flush
flush之後的routing table裡面完全看不到default gateway的設定
圖六
接著我們用routing add把自己需要的routing再加回去
route add -net 0.0.0.0 192.168.43.1
route add 192.168.0.0/16 1921.68.0.1
輸入完上面的指令後我們會看到routing table其實跟圖四一樣
圖七
這時候我們再用ping測試會看到Intetnet與Intranet都通了!
圖八
再用traceroute檢查確定往google的traffic走的是en0
圖八之一
這次traffic總算是走en0到google, 以上就是今天的分享

至於為什麼route delete不能用而route flush管用?! 讓我們再找時間一起慢慢參透~