2016年10月5日 星期三

如何解決移動裝置上的virtualBox與Centos網路規劃設定

[應用情境]小弟使用mac在許多地方移動辦公,每個地方都透過wifi AP提供DHCP網路,因此每次拿到的IP網段都不相同,造成在virtualBox與內部guest os(CentOS)上的設定需有特別方法才能達到我的需求,雖說在 [安裝CentOS 7,Python,VIM的過程記錄]文章中提到的"橋接模式"設定方法也可已達到上網及互聯目的,但就是有些不方便,而主要需要進一步修改的需求如下:

  1. 每次到不同的網路環境下guest os的IP都會不同,因此要透過mac 終端機連線到內部centOS的話,都要先到裡面查詢一下取到的IP後才能使用SSH登入。我希望不要因為Wifi AP配發的網段不同,造成每次的host及guest都配發不同網段IP,而是在不同網路環境上都使用192.168.10.X。
  2. 未來規劃會有許多guest OS在同一個內網環境,分別扮演不同的伺服器角色,因此需要一個固定的IP內網。
下圖是host(MAC)與guest(CentOS)的網路規劃圖,主要的精神是滿足上面兩個需求,讓Guest OS上網透過NAT網路(網卡1),內部交換使用固定IP(網卡2)。區域網路的話,MAC分配使用192.168.10.1,CentOS第一台使用192.168.10.11,後續的主機依此類推。
要達到需求的話,可以依據以下的兩個步驟來完成

[步驟一:virtualBox網路設定]

  • 設定VirtualBox的"僅限主機"資訊,並於Guest OS新增加一個網卡,選用此連網模式。程序為:
    • 點選出VirtualBox左上角的[喜好設定],並點選[網路]中的[僅限主機]
    • 然後按下右邊的+網卡符號後,再[網路卡]填入規劃的IP資訊,例如我規劃讓MAC使用IP 192.168.10.1,網路遮罩為255.255.255.0。
    • 我也建議取消僅限主機內的DHCP功能,將選項內的[啟用伺服器]取消。
選擇VirtualBox[喜好設定]
選擇[網路]-[僅限主機],按下右邊+
輸入規劃中的MAC區網IP
取消DHCP服務

  • 設定Guest OS的網路卡介面
進入到虛擬主機的設定畫面,將介面卡2卡開啟,並選用[僅限主機]附加方式,而介面卡1選用NAT附加方式喔,接著就可以開啟虛擬主機。
啟用guest os的第二張網卡


[步驟二:CentOS網路設定]

  • 登入CentOS後輸入"ip addr show"命令,得知系統多了一張網路卡(如enp0s8),但是並未分配任何IP。
CentOS已經有了一張新的介面卡


  • 網卡進行設定:先透過uuidgen enp0s8指令取得新的UUID資訊,並將此資訊記錄下
  • 進行網路卡設定:先到/etc/sysconfig/network-scripts目錄,將ifcfg-enp0s3複製為ifcfg-enp0s8檔案,並且透過vim來編輯該檔案(如下圖簡單的設定即可),其中UUID就填入上一個步驟所得的值,並記得千萬不要填上Gateway資訊喔,這樣會造成設備上有兩個gateway,會有機會造成無法上網,這部分下面會在詳細說明。而設定中得幾個重點包含
    • NAME:網路卡要顯示的名稱
    • UUID:唯一識別值(我不確定這個值是否一定要使用uuidgen)
    • DEVICE:設備辨識名稱
    • ONBOOT:是否要在開啟的時候啟動網路卡
    • IPADDR:固定IP資訊
    • NETMASK  :網路遮罩

    • 重新啟用網卡:在命令模式下輸入ifdown ifcfg-enp0s8,代表將enp0s8這張網卡關閉,然後再輸入ifup ifcfg-enp0s8來重新啟動
    • 使用ip addr show指令來確認一次所得到的IP是否正確,應該可以看到如以下的資訊,代表主機有一個192.168.10.11的IP
    ============================================
    2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:86:5a:e0 brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
           valid_lft 85247sec preferred_lft 85247sec
        inet6 fe80::a00:27ff:fe86:5ae0/64 scope link 
           valid_lft forever preferred_lft forever
    3: enp0s8: mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:2f:14:24 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.11/24 brd 192.168.10.255 scope global enp0s8
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fe2f:1424/64 scope link 
           valid_lft forever preferred_lft forever
    ============================================


    • 測試網路連線:請輸入ping 168.95.1.1 及ping www.hinet.net來確認都有得到正常的值,如以下範例報表有成功連線囉。
    ============================================

    ping 168.95.1.1
    PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
    64 bytes from 168.95.1.1: icmp_seq=1 ttl=63 time=24.8 ms

    ping www.hinet.net
    PING hinet-hp.cdn.hinet.net (210.71.222.166) 56(84) bytes of data.
    64 bytes from 210-71-222-166.HINET-IP.hinet.net (210.71.222.166): icmp_seq=1 ttl=63 time=17.8 ms
    64 bytes from 210-71-222-166.HINET-IP.hinet.net (210.71.222.166): icmp_seq=2 ttl=63 time=76.2 ms
    64 bytes from 210-71-222-166.HINET-IP.hinet.net (210.71.222.166): icmp_seq=3 ttl=63 time=80.5 ms
    ============================================


    [CentOS路由資訊確認]


    • 小弟開始的時候手賤在CentOS上多設定了Gateway資訊,在開始的時候都可以正常運作,但在某些時候卻無法進行網路連線,而這個問就是所謂的雙路由造成的問題,如果你依照上述的設定方法來設定後,你應該會得到如下圖的route table。其中的Flags=UG,U代表服務界面是開啟的,G代表是gateway。整張路由表代表所有的流量都會往10.0.2.2(就是NAT模式的網卡)這個Gateway來送,包含了區域網路或上網際網路這邊的需求都是。

    正常情況下的路由表

    • 如果你在enp0s8的網卡上面設定gateway後,你看到的route table應該是如下的圖。其中會有兩個Flags會有UG,代表你有兩個Gateway的設定,因此系統會看後面的Metric值哪一個比較"",就預設優先走這個Gateway>_<,而目前還是10.0.2.2這個Gateway的Metric值比較小,因此網路可以正常運作。但在系統重新啟動或者網卡重新啟動的情況,就會有機率變成192.168.10.1這個Gateway變成優先,會造成網路無法連線的情況。當然可以手動解決這個問題,透過route del/add指令重新指派Metric的優先順序,並加他加入.bashrc中在每次登入後自動執行,相關完整概念請參考 [鳥哥的linux私房菜]。但我覺得最好的方法就不要加入Gateway資訊,如此就不會有因為route的問題造成無法連線,然後自己又要再調整半天的情況。


    [回顧及結論]


    • 為了讓Host與Guest能後上網及互聯,簡單使用"橋接模式"方法就可以達到需求,但會因為不同Wifi AP所配發的DHCP網段不同,所以再host與guest所得的IP都會持續的變動,因此每次再使用MAC SSH連入guest之前都需知道配發的網路IP(比較麻煩),且無法使用免認證登入之方式。
    • 如果依照網路的route行為來看,其實guest設定gateway為192.168.10.11到host的話,理論上host(mac)也應該可能將封包轉到Wifi AP上,然後可以進行上網?但小弟測試了許多方法我發現只要使用"僅限主機"方法的話,且route metric預設走僅限主機這邊的路由的話,就無法透過host將封包網外送,我最後的猜測是virtualBox的僅限主機這個方法的限制。
    • 總結來說,如果你要能夠透過host連取有固定IP的guest,且guest能夠正常上網的話,建議你測試看看本文章的方法,再guest上設定兩張網卡,一張走NAT,一張走僅限主機的方法。

    沒有留言:

    張貼留言