Centos 6.5에서 MAC 대신 인터페이스 이름을 기반으로 IP를 설정하는 방법

Centos 6.5에서 MAC 대신 인터페이스 이름을 기반으로 IP를 설정하는 방법

동일한 상자에 사용될 네트워크 인터페이스 설정을 자동화하려고 합니다. 이 상자에는 3개의 서로 다른 NIC가 있습니다. 3개의 NIC 각각에는 구별하는 데 사용할 수 있는 서로 다른 MAC 접두사가 있으며, 적절한 MAC 접두사 이름과 일치하는 와일드카드를 사용하여 예측 가능한 MAC 주소에 매핑하도록 udev 규칙을 설정했습니다.

그러나 Centos 6.5에서 인터페이스를 이름별로 원하는 IP 구성에 매핑하는 데 문제가 있습니다. 일반적인 방법(HWADDR)은 전체 MAC 주소를 사용하고 박스마다 주소가 다르기 때문에 사용할 수 없으므로 장치 이름을 일치시키려고 합니다. 문제는 NetworkManager 데몬에 있는 것 같습니다.

내가 한 일은 ifcfg-로 설정되었습니다.장비/etc/sysconf/network-scripts 디렉토리의 파일. 예를 들어, ifcfg-i1:

DEVICE=i1
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.102.30.158
PREFIX=24
GATEWAY=10.102.30.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ONBOOT=yes
UUID=9ff7691b-e65b-4f9b-b6f2-e7549662403b

모든 것이 정상입니다.만약에NetworkManager 데몬이 시작되기 전에 모든 인터페이스가 나타납니다. 그러나 3개의 인터페이스가 "준비"되기 전에 서비스가 시작되면 서비스는 ifcfg 파일에 있는 것과 다른 IP로 인터페이스를 설정합니다. IP 오류가 발생한 경우 /var/log/messages의 관련 행은 다음과 같습니다.

Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_UP): i1: link is not ready
Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_UP): i2: link is not ready
Jul 31 18:19:14 centos6 kernel: e1000e: i1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_CHANGE): i1: link becomes ready
Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_UP): i3: link is not ready
Jul 31 18:19:14 centos6 kernel: e1000e: i2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_CHANGE): i2: link becomes ready

이제 NetworkManager 서비스가 시작되었지만 i3은 아직 준비되지 않았습니다.

Jul 31 18:19:15 centos6 NetworkManager[2350]: <info> NetworkManager (version 0.8.1-66.el6) is starting...
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-lo ...
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-i3 ...
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh:     read connection 'System i3'
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-i1 ...
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh:     read connection 'System i1'
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-i2 ...
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh:     read connection 'System i2'
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-em1 ...
Jul 31 18:19:15 centos6 NetworkManager[2350]:    ifcfg-rh:     read connection 'System em1'

마침내 i3가 실제로 준비되었습니다.

Jul 31 18:19:16 centos6 kernel: e1000e: i3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jul 31 18:19:16 centos6 kernel: ADDRCONF(NETDEV_CHANGE): i3: link becomes ready
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i1): device state change: 7 -> 8 (reason 0)
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Policy set 'System i1' (i1) as default for IPv4 routing and DNS.
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Activation (i1) successful, device activated.
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Activation (i1) Stage 5 of 5 (IP Configure Commit) complete.
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i3): carrier now ON (device state 2)
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i3): device state change: 2 -> 3 (reason 40)
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Auto-activating connection 'System i1'.
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Activation (i3) starting connection 'System i1'
Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i3): device state change: 3 -> 4 (reason 0)

그러나 현재 NetworkManager는 i1을 기본 정책으로 결정하고 i3에도 i1 IP(10.102.30.158)를 할당했습니다.

ifcfg-xxx 파일에 NM_CONTROLLED="no"를 추가하려고 시도했지만 NetworkManager 로그에 다음이 표시됩니다.

warning: NM_CONTROLLED was false but HWADDR or SUBCHANNELS was missing; device will be managed

인터페이스에는 영향이 없습니다. 정확한 MAC 주소를 사용할 수 없어서 HWADDR을 사용할 수 없습니다.

우선 이게 버그인가요? NetworkManager가 시작되기 전에 인터페이스가 시작되면 모든 것이 정상이므로 결과는 경쟁 조건에 따라 달라집니다.

이것이 버그가 아닌 경우 어떻게 이를 달성할 수 있습니까? NetworkManager를 비활성화하는 것은 옵션이 아닐 수도 있습니다.

답변1

나는 이것을 게시했다질문Centos 6 네트워킹 포럼으로 이동하면 HWADDR을 사용하는 것이 유일하게 지원되는 방법이라는 응답이 있습니다(적어도 NetworkManager의 경우).

그들은 나에게 ifcfg-를 생성하라고 제안했습니다.장비네트워크가 시작되기 전에 파일에는 정확한 MAC 주소가 있습니다. 초기화 스크립트를 사용하는 것은 쉽습니다.

관련 정보