두 가상 머신 사이에 브리지를 만드는 방법은 무엇입니까?

두 가상 머신 사이에 브리지를 만드는 방법은 무엇입니까?

저는 virt-installCentOS 7 호스트에 두 개의 CentOS 7 가상 머신을 만든 적이 있습니다. 가상 머신이 호출되어 webvm개인 네트워크에서 웹사이트를 호스팅합니다. 또 다른 가상 머신은 datavm호스팅된 웹 애플리케이션을 위한 가상 데이터베이스 서버 역할을 하는 유일한 목적을 가진 가상 데이터베이스 서버 라고 합니다 webvm. datavm의 데이터 연결만 허용 webvm하고 해당 데이터 연결이 물리적 서버 상자에서 발생하도록 네트워크를 어떻게 설정합니까 ?그 사이의 데이터베이스 트랜잭션이 로컬 네트워크를 통해 전송 webvm되지 않도록 하고 싶습니다 .datavm

브리지된 네트워크는 호스트 운영 체제를 각 게스트 운영 체제에 연결했습니다.

LAN IP와 네트워크 IP webvm가 있습니다. 일반적인 호스팅 웹 애플리케이션의 연결 문자열은 다음과 같습니다. 10.0.0.6datavm10.0.0.5webvm

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.  

이를 위해 다음 명령을 실행하여 기준선을 얻었습니다.주인:

[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 ~]# 

그런 다음 HOST에서 다음 명령을 실행했습니다.

[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 # 

그런 다음 각 가상 머신에 개별적으로 로그인했는데 브리지된 네트워크의 새 연결 표시 이름은 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"

데이터 가상 머신에서:

[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(대상 호스트에 연결할 수 없음)하고 다시 실패 ping 10.1.1.2했습니다 data vm(대상 호스트에 연결할 수 없음).

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가 제안한 내용을 달성하려면 또 무엇을 입력해야 합니까? 모든 데이터 트래픽은 물리적 상자 내에 유지되어야 하므로 새 브리지에는 새 브리지에서만 사용할 datavm 및 webvm에 대한 새 IP 주소가 포함되어야 합니다.

@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이나 논쟁 때문일 수 있다고 생각 uuid하지만 그것은 단지 추측일 뿐입니다. ifcfg-*@garethTheRed의 편집 내용과 위에 표시된 추가 매개변수를 포함하도록 파일을 되돌리면 systemctl restart network오류 없이 실행되지만 핑은 실패합니다.

답변1

여기에는 두 가지 이유가 있을 수 있습니다.

가능한 원인 중 하나는 개인 네트워크를 구축한 방식(호스트의 브리지 사용)입니다. 를 사용하여 구성하는 것이 더 안전하고 쉽습니다 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 구성을 편집한 후에는 각 VM에 로그인하고 OP의 관련 IP 세부 정보를 사용하여 OS를 구성할 수 있습니다. 하지만 먼저 읽어보세요...

둘째, 새 인터페이스를 가리키는 두 가상 머신 사이에는 경로가 없습니다. 또 다른 상황은 접두사로 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

다른 가상 머신( )에서 유사한 프로세스를 수행하면 10.1.1.2/30제대로 작동합니다.

참고: 는 /31IP 주소를 및 로 변경할 때만 10.1.1.0사용할 수 있습니다 10.1.1.1. 범위의 첫 번째 주소는 일반적으로 네트워크 주소용으로 예약되어 있고 마지막 주소는 브로드캐스트용으로 사용되기 때문에 이로 인해 문제가 발생할 수 있습니다. 에는 주소가 2개만 있으므로 /31호스트가 사용할 주소가 없습니다. 이를 고수하는 것이 가장 좋습니다 /30. 그러면 4개의 주소(2개는 예약되어 있고 2개는 호스트용)가 제공됩니다.

답변2

다른 브리지에 연결하면 다른 서브넷에 있는 다른 IP 주소를 제공해야 한다는 것을 알고 계시죠? 한 대의 컴퓨터에서만 트래픽을 허용하고 기본 브리지를 유지하도록 방화벽 규칙을 설정하는 것이 가장 좋습니다.

그렇지 않은 경우 virt-manager가상 머신 네트워크 설정을 구성하고 기본 자동 관리 브리지 대신 지정한 인터페이스를 사용하도록 설정하고 /etc/network/interfaces를 수동으로 편집하여 이 목적을 위해 특별히 브리지 인터페이스를 생성해야 합니다.

이것은 Xen에 대해 수동으로 구성한 브리지입니다.

auto xenbr0
iface xenbr0 inet static
        bridge_ports em2
        address 10.1.1.8
        netmask 255.255.255.0
        network 10.1.1.0
        broadcast 10.1.1.255
        gateway 10.1.1.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8

답변3

여러 가지 방법으로 이를 달성할 수 있지만 서버 간 데이터 흐름을 위해서만 두 번째 네트워크와 두 번째 브리지 인터페이스가 필요할 것 같습니다.

서버당 두 개의 NIC가 있는 것으로 생각하십시오. 하나는 일반 액세스용이고 다른 하나는 서버 간 액세스용입니다. 이 네트워크에 대해 서로 다른 IP 주소 범위를 사용하면 예외 없이 서로 통신할 수 있어야 합니다.

새 브리지를 설정하는 데 문제가 있고 더 간단한 설정을 원하는 경우 다른 IP 주소 범위를 사용하는 기존 NIC에 하위 인터페이스를 추가해 보세요. LAN 트래픽만 있었다면 그렇게 했을 것입니다.

행운을 빌어요!

관련 정보