![VirtualBox의 CentOS 7에서 2개의 eth 장치를 사용하여 bond0 인터페이스를 설정하고 싶습니까?](https://linux55.com/image/140456/VirtualBox%EC%9D%98%20CentOS%207%EC%97%90%EC%84%9C%202%EA%B0%9C%EC%9D%98%20eth%20%EC%9E%A5%EC%B9%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20bond0%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B3%A0%20%EC%8B%B6%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
인터페이스 바인딩을 시도할 수 있도록 VirtualBox에 CentOS 7.x 가상 머신을 설정하고 싶습니다. 다음 인터페이스를 갖도록 이 가상 머신을 설정하려면 어떻게 해야 합니까?
- eth1(사설망 - 192.168.56.101)
- eth2(bond0의 슬레이브)
- eth3(bond0의 슬레이브)
- bond0(LACP 사용)
Vagrant를 사용하여 설정을 단순화하면 복제가 더 쉬워지는 데 도움이 될 수 있습니다.
노트:수동으로 설정하고 싶은데 NetworkManager를 비활성화하는 예를 보여주세요.
답변1
방랑자 설정
Vagrantfile
먼저 다음 명령을 사용하여 가상 머신을 구축 할 수 있습니다 .
$ cat Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.hostname="box-101"
config.ssh.forward_x11 = true
config.vm.network "private_network", ip: "192.168.56.101"
config.vm.network "public_network", bridge: "en0: Wi-Fi (Wireless)", auto_config: false
config.vm.network "public_network", bridge: "en0: Wi-Fi (Wireless)", auto_config: false
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
config.vm.provision "shell", inline: <<-SHELL
yum install -y git vim socat tcpdump wget sysstat
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
SHELL
end
노트:내가 사용하고 있는 NIC는 public_network
내 Macbook bridge: "en0: Wi-Fi (Wireless)"
장치입니다. 다른 작업에서 이 작업을 수행하는 경우 Vagrant/VirtualBox를 실행하는 호스트 시스템의 적절한 NIC로 변경해야 합니다.
위 파일에는 VM을 시작할 때 생성된 3개의 NIC가 포함되어 있습니다. VM과 SSH를 시작하려면 다음 안내를 따르세요.
$ vagrant up
$ vagrant ssh
초기 네트워크 설정
결과 네트워크를 살펴보면 다음과 같은 내용을 볼 수 있습니다.
$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c0:42:d5 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85127sec preferred_lft 85127sec
inet6 fe80::5054:ff:fec0:42d5/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:ce:88:39 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fece:8839/64 scope link
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:d7:c2:ec brd ff:ff:ff:ff:ff:ff
inet6 fe80::df68:9ee2:4b5:ad5f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:59:b0:69 brd ff:ff:ff:ff:ff:ff
그리고 해당 경로는 다음과 같습니다.
$ ip r
default via 10.0.2.2 dev eth0 proto dhcp metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.101 metric 102
네트워크 관리자 비활성화
이 가상 머신에서는 본딩된 인터페이스 + 슬레이브 인터페이스를 수동으로 구성할 수 있도록 NetworkManager를 비활성화하겠습니다.
$ for i in NetworkManager-dispatcher NetworkManager NetworkManager-wait-online; do
systemctl disable $i && systemctl stop $i
done
이제 NM이 비활성화되었는지 확인합니다.
$ systemctl list-unit-files |grep NetworkManager
NetworkManager-dispatcher.service disabled
NetworkManager-wait-online.service disabled
NetworkManager.service disabled
바인딩 인터페이스 설정
먼저 3개의 파일을 빌드하겠습니다. bond0 인터페이스용으로 1개, 슬레이브로 사용할 인터페이스 2개용으로 1개(eth2 및 eth3).
ifcfg-bond0
$ cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
Type=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.232
PREFIX=24
GATEWAY=192.168.1.2
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
노트: mode=4
(802.3ad)라고도 합니다. LACP. miimon=100
100ms 확인 간격이며 lacp_rate=1
파트너로부터 빠른 TX입니다. 이 명령을 통해 본딩 모듈에서 허용하는 모든 매개변수를 볼 수 있습니다 modinfo bonding
.
이더리움 2
$ cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
IPV6INIT=no
MASTER=bond0
SLAVE=yes
이더리움 3
$ cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
IPV6INIT=no
MASTER=bond0
SLAVE=yes
노트:위에서는 bond0 인터페이스에 IP 주소 192.168.1.232와 게이트웨이 192.168.1.2를 정적으로 할당했습니다. 상황에 맞게 바꿔주시면 됩니다.
인터페이스 시작
네트워킹을 시작하는 가장 쉬운 방법은 네트워크 서비스를 다시 시작하는 것입니다.
$ systemctl restart network
인터페이스와 라우팅을 살펴보면 다음과 같습니다.
$ ip a l
..
..
4: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 08:00:27:d7:c2:ec brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 08:00:27:d7:c2:ec brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:d7:c2:ec brd ff:ff:ff:ff:ff:ff
inet 192.168.1.232/24 brd 192.168.1.255 scope global bond0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fed7:c2ec/64 scope link
valid_lft forever preferred_lft forever
$ ip r
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
169.254.0.0/16 dev eth0 scope link metric 1002
169.254.0.0/16 dev eth1 scope link metric 1003
169.254.0.0/16 dev bond0 scope link metric 1006
192.168.1.0/24 dev bond0 proto kernel scope link src 192.168.1.232
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.101
접착제 세부사항
인터페이스 상태에 대한 자세한 정보를 얻기 위해 인터페이스에 바인딩된 장치를 볼 수도 있습니다.
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 08:00:27:d7:c2:ec
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 9
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00
Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:d7:c2:ec
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: churned
Actor Churned Count: 0
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 08:00:27:d7:c2:ec
port key: 9
port priority: 255
port number: 1
port state: 207
details partner lacp pdu:
system priority: 65535
system mac address: 00:00:00:00:00:00
oper key: 1
port priority: 255
port number: 1
port state: 3
Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:59:b0:69
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: churned
Partner Churn State: churned
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 08:00:27:d7:c2:ec
port key: 9
port priority: 255
port number: 2
port state: 199
details partner lacp pdu:
system priority: 65535
system mac address: 00:00:00:00:00:00
oper key: 1
port priority: 255
port number: 1
port state: 3
외부 연결 확인
아래에서는 네트워크의 다른 컴퓨터에서 실행한 bond0 IP 주소의 ping 출력을 볼 수 있습니다. 서비스를 다시 시작하면 network
서비스에 액세스할 수 있는 것을 볼 수 있습니다.
$ ping 192.168.1.232
From 192.168.1.10 icmp_seq=7414 Destination Host Unreachable
From 192.168.1.10 icmp_seq=7415 Destination Host Unreachable
64 bytes from 192.168.1.232: icmp_seq=7416 ttl=64 time=886 ms
64 bytes from 192.168.1.232: icmp_seq=7417 ttl=64 time=3.58 ms
64 bytes from 192.168.1.232: icmp_seq=7418 ttl=64 time=3.52 ms
64 bytes from 192.168.1.232: icmp_seq=7419 ttl=64 time=3.46 ms
64 bytes from 192.168.1.232: icmp_seq=7420 ttl=64 time=3.15 ms
64 bytes from 192.168.1.232: icmp_seq=7421 ttl=64 time=3.50 ms
재시작 프롬프트
CentOS 7.x에서는 부팅 중에 bond0 인터페이스가 제대로 시작되는 데 버그/문제가 있는 것 같습니다. 이 문제의 해결 방법은 다음을 추가하는 것입니다.
$ echo "ifup bond0" >> /etc/rc.d/rc.local
$ chmod +x /etc/rc.d/rc.local
bond0
이렇게 하면 부팅 중에 인터페이스가 올바르게 작동 됩니다 .