如何在兩個虛擬機之間架起一座橋樑?
我曾經
virt-install
在 CentOS 7 主機上創建兩個 CentOS 7 虛擬機來賓。一台虛擬機稱為webvm
,並在專用網路上託管網站。另一個虛擬機被呼叫datavm
,其唯一目的是作為託管在webvm
. 如何設置網路以便datavm
僅允許來自 的數據連接webvm
,並且這些數據連接發生在物理伺服器框中? 我想確保數據庫事務之間webvm
不datavm
跨本地網路傳輸。請注意,橋接網路已經將主機作業系統連結到每個來賓作業系統。
is的區域網路ip和is的
webvm
網路10.0.0.6
ip 。來自託管的典型 Web 應用程序的連接字元串是:datavm``10.0.0.5``webvm
jdbc:mysql://localhost:3306/somedb?autoReconnect=true
你可以看到
localhost
指的是webvm
. 我們顯然需要使用 10.1.1.x 地址建立一個新的第二個橋接網路,以便連接字元串變為jdbc:mysql://10.1.1.1:3306/somedb?autoReconnect=true
.無論我們添加什麼新的橋接網路程式碼,都不能與預先存在的橋接網路衝突。
datavm
那麼如何在和之間建立一對一的獨占數據連接webvm
呢?正在進行的更新工作:
@derobert 建議採取以下步驟:
1.) Add a second bridge to the host. 2.) Add a second network interface to webvm, connected to the new host bridge. 3.) Add a second network interface to datavm, connected to the new host bridge. 4.) Configure the new network interfaces inside each guest.
為此,我通過在HOST中執行以下命令獲得了基線:
[root@localhost ~]# nmcli con show NAME UUID TYPE DEVICE bridge-slave-eno1 c36fd051-cacc-4e91-944f-a98f4fee26ff 802-3-ethernet eno1 bridge-br0 d472bc86-0f75-4dd5-bfee-5b8208b3fed2 bridge br0 System eno1 abf4c85b-57cc-4484-4fa9-b4a71689c359 802-3-ethernet -- vnet1 ea985e89-94fb-403c-af33-7daefb378ca5 generic vnet1 vnet0 06deb20d-b0b7-4233-8abc-cbb285165082 generic vnet0 [root@localhost ~]#
然後我在裡面執行了以下內容**
webvm
**:[root@localhost ~]# nmcli con show NAME UUID TYPE DEVICE eth0 71bf7ff1-7574-4364-8c83-5878ed30d028 802-3-ethernet eth0 [root@localhost ~]#
然後我在裡面執行了以下內容**
datavm
**:[root@localhost ~]# nmcli con show NAME UUID TYPE DEVICE eth0 d976f7ca-ab7f-4fd0-ab2b-6213815bd1a1 802-3-ethernet eth0 [root@localhost ~]#
然後我在主機上實現了以下命令:
[root@localhost ~]# nmcli con add type bridge ifname br1 Connection 'bridge-br1' (8b9fd6d9-bcb4-4e1c-85ab-55905d08667e) successfully added. [root@localhost ~]# nmcli con show NAME UUID TYPE DEVICE bridge-slave-eno1 c36fd051-cacc-4e91-944f-a98f4fee26ff 802-3-ethernet eno1 bridge-br0 d472bc86-0f75-4dd5-bfee-5b8208b3fed2 bridge br0 System eno1 abf4c85b-57cc-4484-4fa9-b4a71689c359 802-3-ethernet -- bridge-br1 8b9fd6d9-bcb4-4e1c-85ab-55905d08667e bridge br1 vnet1 ea985e89-94fb-403c-af33-7daefb378ca5 generic vnet1 vnet0 06deb20d-b0b7-4233-8abc-cbb285165082 generic vnet0 [root@localhost ~]# virsh Welcome to virsh, the virtualization interactive terminal. virsh # list Id Name State ---------------------------------------------------- 2 public4-centos7 running 4 data-centos7 running virsh # attach-interface data-centos7 bridge br1 Interface attached successfully virsh # attach-interface public4-centos7 bridge br1 Interface attached successfully virsh #
然後我分別登錄到每台虛擬機,新的橋接網路連接顯示為 name
Wired connection 1
,如下所示:在網路虛擬機中:
[root@localhost ~]# nmcli con show NAME UUID TYPE DEVICE Wired connection 1 44f1f791-0d86-4587-8a2d-48dfa217ee99 802-3-ethernet ens7 eth0 71bf7ff1-7574-4364-8c83-5878ed30d028 802-3-ethernet eth0 [root@localhost ~]# nmcli con modify 'Wired connection 1' ipv4.addresses "10.1.1.2"
在數據 vm 中:
[root@localhost ~]# nmcli con show NAME UUID TYPE DEVICE Wired connection 1 448101d7-1f8f-4b78-ad90-7efd5be23b08 802-3-ethernet ens7 eth0 d976f7ca-ab7f-4fd0-ab2b-6213815bd1a1 802-3-ethernet eth0 [root@localhost ~]# nmcli con modify 'Wired connection 1' ipv4.addresses "10.1.1.1"
但隨後
ping 10.1.1.1
從web vm
失敗(Destination Host Unreachable),ping 10.1.1.2
又從data vm
失敗(Destination Host Unreachable)。中
web vm
,內容為vi /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1
:HWADDR=52:54:00:8F:3B:14 TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME="Wired connection 1" UUID=44f1f791-0d86-4587-8a2d-48dfa217ee99 ONBOOT=yes IPADDR=10.1.1.2 PREFIX=16 PEERDNS=yes PEERROUTES=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes
中
data_vm
,內容為vi /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1
:HWADDR=52:54:00:1F:FE:27 TYPE=Ethernet BOOTPROTO=dhcp IPADDR=10.1.1.1 PREFIX=32 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME="Wired connection 1" UUID=448101d7-1f8f-4b78-ad90-7efd5be23b08 ONBOOT=yes
我還要輸入什麼來完成@derobert 的建議? 請記住,所有數據流量都需要保留在 PHYSICAL BOX 內,因此新網橋必須包含新的 ip 地址,以便 datavm 和 webvm 僅在新網橋中使用。
根據@garethTheRed 的評論,我輸入
ip route
了web vm
以下內容:[root@localhost network-scripts]# ip route default via 10.0.0.1 dev eth0 proto static metric 100 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.6 metric 100 10.1.1.0/30 dev ens7 proto kernel scope link src 10.1.1.2 10.1.1.2/31 dev ens7 proto kernel scope link src 10.1.1.2 metric 100 169.254.0.0/16 dev ens7 scope link metric 1003 [root@localhost network-scripts]#
然後我輸入
ip route
並data vm
得到以下資訊:[root@localhost network-scripts]# ip route default via 10.0.0.1 dev eth0 proto static metric 100 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5 metric 100 10.1.1.0/31 dev ens7 proto kernel scope link src 10.1.1.1 metric 100 10.1.1.0/30 dev ens7 proto kernel scope link src 10.1.1.1 169.254.0.0/16 dev ens7 scope link metric 1003 [root@localhost network-scripts]#
當我嘗試將文件剝離
ifcfg-*
到答案中的 6 行時導致失敗systemctl restart network
。我認為這可能是由於hardware
oruuid
論點,但這只是一個猜測。當我恢復ifcfg-*
文件以包含@garethTheRed 的編輯以及上面顯示的額外參數時,systemctl restart network
然後執行沒有錯誤,但 ping 失敗。
有兩件事可能是造成這種情況的原因:
一個可能的原因是您建構專用網路的方式(使用主機上的網橋)。使用
virt-manager
. 如果您的主機僅為 CLI,請將其安裝在遠端桌面/筆記型電腦上並通過 SSH 連接到主機。安裝後,連接到管理程序,右鍵點擊列表中的名稱並選擇“詳細資訊”。在“虛擬網路”選項卡上,您可以通過點擊“+”按鈕(左下角)添加新網路。該嚮導將引導您完成該過程,但請確保您取消選中 IPv4 和 IPv6 地址選項(您不需要它們,因為它是點對點連結)並選擇“專用網路”的單選按鈕. 繼續嚮導並退出。
如果你是一個死忠命令行的人,那麼上面的操作都可以通過
virsh net-define
命令行界面來進行。創建一個 XML 文件,如下例所示(virbr2
是未使用的網橋名稱 - 用於brctl show
列出您的名稱):<network> <name>private</name> <bridge name="virbr2" /> </network>
然後使用以下命令導入:
# virsh net-define <XML filename>
完成上述操作後,您可以編輯每個虛擬機以使用這個新的專用網路(您必須重新啟動虛擬機才能使其生效)。編輯完 VM 配置後,您就可以登錄每個配置並使用相關 IP 詳細資訊(來自您的 OP)配置作業系統。但是,請先閱讀…
其次,兩個虛擬機之間沒有指向新介面的路由。另一個這是因為您已經為 IP 地址配置了
/32
前綴。編輯連接時使用格式
a.b.c.d/p
設置前綴;否則,如果沒有前綴,它將預設為/32
:# nmcli con edit "Wired connection 1" nmcli> set ipv4.addresses 10.1.1.1/30 nmcli> save nmcli> quit # systemctl restart network
手動配置網路也可以:
NM_CONTROLLED=no TYPE=Ethernet BOOTPROTO=none ONBOOT=yes IPADDR=10.1.1.1 PREFIX=30
在另一個 VM ( ) 上執行類似的過程
10.1.1.2/30
,它應該可以工作。注意:您可以使用
/31
,但前提是您將 IP 地址更改為10.1.1.0
和10.1.1.1
。這可能會導致問題,因為範圍中的第一個地址通常保留給網路地址,最後一個地址用於廣播。由於您只有兩個帶有 的地址/31
,因此您將沒有任何地址可供主機使用。最好堅持使用/30
,它為您提供 4 個地址 - 兩個保留地址和兩個用於您的主機。