저는 virt-install
CentOS 7 호스트에 두 개의 CentOS 7 가상 머신을 만든 적이 있습니다. 가상 머신이 호출되어 webvm
개인 네트워크에서 웹사이트를 호스팅합니다. 또 다른 가상 머신은 datavm
호스팅된 웹 애플리케이션을 위한 가상 데이터베이스 서버 역할을 하는 유일한 목적을 가진 가상 데이터베이스 서버 라고 합니다 webvm
. datavm
의 데이터 연결만 허용 webvm
하고 해당 데이터 연결이 물리적 서버 상자에서 발생하도록 네트워크를 어떻게 설정합니까 ?그 사이의 데이터베이스 트랜잭션이 로컬 네트워크를 통해 전송 webvm
되지 않도록 하고 싶습니다 .datavm
브리지된 네트워크는 호스트 운영 체제를 각 게스트 운영 체제에 연결했습니다.
LAN IP와 네트워크 IP webvm
가 있습니다. 일반적인 호스팅 웹 애플리케이션의 연결 문자열은 다음과 같습니다. 10.0.0.6
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.
이를 위해 다음 명령을 실행하여 기준선을 얻었습니다.주인:
[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
제대로 작동합니다.
참고: 는 /31
IP 주소를 및 로 변경할 때만 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 트래픽만 있었다면 그렇게 했을 것입니다.
행운을 빌어요!