2021-05-12 14:32:11
基於macOS+VMware的GNS3內VM上公網
筆者經常需要做網路實驗,GNS3就是筆者最喜歡用的模擬器,為了便於實驗,需要能從macos上直接ssh登陸模擬出來的vm,並且vm需要上公網。經過研究,已解決此問題,並以此分享出來
tag: macos, vmware, gns3, vm上公網
小慢哥的原創文章,歡迎轉載
環境說明
本文基於以下環境:
? 宿主:macOS Mojave
? GNS3版本:2.1.14
? GNS3內部的VM執行在:GNS3 VM裡
? GNS3 VM執行在:VMware Fusion 專業版 11.0.1
? CentOS7.3是執行在GNS3 VM裡的Qemu虛擬機器
可以理解為在macOS上執行了VMware,在VMware裡執行了GNS3 VM,在GNS3 VM裡執行了Qemu虛擬機器。
對,就是"俄羅斯套娃"。
想讓GNS3內的VM上Internet公網,有2種方法,接下來分別詳細講解
方法1(內建)
GNS3內建一個nat cloud,只要將vm連上這個nat cloud就可以上公網(上圖中的Nat1就是nat cloud)
實現原理:nat cloud會對封包進行SNAT,將源IP轉換成macOS上出公網對應的本機ip。比如macOS是用wifi上網,wifi dhcp分配給macOS的ip是192.168.1.10,那麼nat cloud就會將自己的ip出公網封包的源IP轉換為192.168.1.10
? 優點:無需任何額外設定,GNS3內建實現
? 缺點:無法從macOS上直接ssh連線到vm(即圖上的centos7.3-1,本文接下去的部分若無特殊說明,均用vm表示),只能通過vnc連線
方法2(推薦)
採用vmnet + GNS3 VM加網絡卡 + 自定義cloud + pfctl + 開啟ip_forward
? 優點:vm不僅可以上網,還可以從mac上連線到vm裡做管理
? 缺點:設定相對複雜,需要對macos、vmware、gns3、網路原理有一定了解
1?? vmware偏好設定裡新增一張網絡卡,這裡為vmnet2,然後按下圖所示進行設定
? “允許該網路上的虛擬機器連線到外部網路(使用NAT)”不要勾選,因為測試發現bug(比如虛擬機器裡存取Internet公網,響應時有時無,延時也很嚴重,懷疑是GNS3 VM的bug)
? “將Mac主機連線到該網路”要勾選,這樣在macos上才能出現vmnet2網絡卡
? 子網IP是自動生成的,這裡是172.16.71.0/24,對應macos上vmnet2的ip是172.16.71.1/24
2?? GNS3 VM加網絡卡
在vmware裡開啟GNS3 VM的設定,新增一張網絡卡,如下圖紅框裡的網路介面卡3就是筆者新增的網絡卡
3?? 自定義cloud
如下圖,要選擇“Run the cloud node on the GNS3 VM”
名字任意,這裡叫做mgr-cloud
注意,只需要將eth2(即上一步新增的網路介面卡3)Add進來
4?? 在macos上通過pfctl設定nat,以及允許vmnet2流量進出
a. sudo vim /etc/pf.anchors/vmware-gns3,內容如下
圖上的en7是筆者mac上的有線網絡卡,en0是我mac上的wifi網絡卡(因為在公司是用有線網絡卡,在家裡是用wifi上網,所以按上面這樣設定2條,就無需擔心網路切換會導致nat失敗)
b. sudo vim /etc/pf.conf,內容如下(紅框內容是需要增加的)
c. 校驗組態檔並生效:
# 校驗
sudo pfctl -vnf /etc/pf.anchors/vmware-gns3
sudo pfctl -vnf /etc/pf.conf
# 生效
sudo pfctl -ef /etc/pf.conf
pfctl會在mac開機時自動執行,無需每次都手工執行
5?? 開啟ip_forward
sudo sysctl -w net.inet.ip.forwarding=1
注意:該命令在mac重新啟動後就會失效,因此在使用GNS3時候需要手工執行一次
測試
方法1不符合需求,就不再贅述
方法2的測試:此時,vm裡應該已經通過dhcp獲得ip地址,並且可以直接從mac上ssh登陸vm。然後在vm裡只需要手工增加一條閘道器(閘道器指向mac上vmnet2的ip,筆者環境對應的是172.16.71.1),就可以通過mac上公網。另外,vm裡的dns需要手工設定(比如指向8.8.8.8)
附:多台vm上公網
如果需要多台vm上公網,可以自行新增一個hub或switch
相關文章