가상 머신이 서로 다른 서브넷에서 NIC 1개와 IP 주소 2개를 사용하여 게이트웨이로 설정된 Ubuntu 14.04 호스트에서 게이트웨이의 MAC 주소를 "잊었습니다"

가상 머신이 서로 다른 서브넷에서 NIC 1개와 IP 주소 2개를 사용하여 게이트웨이로 설정된 Ubuntu 14.04 호스트에서 게이트웨이의 MAC 주소를 "잊었습니다"

네트워크 카드가 있는 Ubuntu 14.04 서버가 있습니다. 해당 NIC의 MAC 주소는 동일한 서브넷(XXX1)에 있는 데이터 센터 게이트웨이에 의해 한 서브넷(XXX0/24)의 IP(XXX100)에 할당되고 완전히 다른 서브넷에서 할당됩니다. 하나의 추가 IP 범위 서브넷(YYY0) /28).

동일한 인터페이스(eth0)에 XXX100 및 YYY1을 사용하여 서버를 설정했으며 서버는 두 IP 주소를 통해 나머지 인터넷과 연결하고 연결할 수 있습니다.

두 번째 서브넷의 IP 주소를 사용하는 일부 가상 머신이 있습니다. 나는 그들이 호스트의 두 번째 IP 주소인 YYY1을 게이트웨이 주소로 사용해야 한다고 가정합니다(내가 이해한 바에 따르면 그들은 데이터 센터의 게이트웨이 주소가 다른 서브넷에 있기 때문에 액세스할 수 없기 때문입니다). 내가 가지고 있는 모든 IP 주소인 XXX100과 YYY0/28은 데이터 센터의 게이트웨이에서 정적으로 라우팅되므로 이에 대한 모든 요청은 내 서버의 NIC로 이동합니다. 또한 가상 머신의 MAC 주소가 아닌 해당 NIC의 MAC 주소에서만 요청을 수락합니다.

YYY0/28 서브넷에 대한 모든 요청이 데이터 센터의 게이트웨이 XXX1을 통해 라우팅되도록 호스트를 설정하려면 어떻게 해야 합니까?

내가 아는 한, 단순히 넷마스크를 확장할 수는 없습니다. 그렇게 하면 네트워크의 다른 서버에 접속할 수 없게 될 수도 있기 때문입니다.

이것은 서버에서 온 것입니다./etc/network/interfaces

auto lo
iface lo inet loopback

auto  eth0

iface eth0 inet static
  address   X.X.X.100
  netmask   255.255.255.0
  gateway   X.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

iface eth0 inet static
  address   Y.Y.Y.1
  netmask   255.255.255.240

/etc/sysctl.conf이 줄을 활성화한 후 :

net.ipv4.ip_forward=1

VM은 IP 주소로 YYYn(n>1)을 사용하고 게이트웨이로 YYY1을 사용합니다.

위 설정을 사용하면 가상 머신은 두 개의 IP 주소를 통해 호스트에 연결할 수 있지만 다른 호스트에는 연결할 수 없습니다. 가상 머신이 ISP 게이트웨이 XXX1의 MAC 주소를 찾을 수 없는 것 같습니다.

$ arp -an
? (X.X.X.1) at c8:60:00:5e:bd:e0 [ether] on eth0
? (Y.Y.Y.1) at <incomplete> on eth0

그런데 이상하게도 가끔은...

$ arp -an
? (X.X.X.1) at c8:60:00:5e:bd:e0 [ether] on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] on eth0

이 두 가지 예는 불과 몇 분 거리에 있습니다. 가상 머신에 핑을 보내는 느낌이 들었습니다. 특히 핑이 울리는 느낌이 들었습니다.~에서VM은 순전히 우연일 수도 있지만 MAC 주소를 얻는 프로세스 속도를 높입니다.

MAC 주소와 XXX1을 "소유"하면 모든 것이 실제로 잘 작동합니다! 가상 머신에서 인터넷에 액세스할 수 있으며 YYYn 주소를 사용하여 인터넷에서 가상 머신에 액세스할 수 있습니다. 하지만 항상 작동하는 것은 아닙니다. 때로는 YYY1의 MAC 주소를 다시 "잊어" 액세스할 수 없게 되는 경우도 있습니다.

실제로 ARP 목록에 YYY1이 나열되어 있다는 사실에 놀랐습니다. 이는 동일한 서브넷에 있는 장치에만 적용되는 줄 알았습니다. 내 목표는 호스트를 게이트웨이 주소(YYY1)로 사용하고 호스트가 XXX0/24에서 모든 통신을 수행하도록 하여 문제를 피하도록 하는 것입니다.

내 구성이 합리적입니까?

이 구성을 사용하는 사람이 또 있나요?

이상한 "건망증"의 원인은 무엇일까요?

고쳐 쓰다:

VM이 호스트의 IP 주소 대신 데이터 센터 게이트웨이의 MAC 주소를 게이트웨이(YYY1)로 직접 사용하도록 시도했지만 문제가 지속됩니다.

$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at c8:60:00:5e:bd:e0 [ether] PERM on eth0
raw@test-server:~$ sudo arp -s Y.Y.Y.1 cc:e1:7f:07:e0:af
raw@test-server:~$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
raw@test-server:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From Y.Y.Y.3 icmp_seq=1 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=2 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=3 Destination Host Unreachable
From Y.Y.Y.3 icmp_seq=4 Destination Host Unreachable

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
pipe 3

ARP 항목이 있는 경우에만 제대로 작동합니다 SIOCSARP: Network is unreachable.

$ arp -an
? (X.X.X.1) at cc:e1:7f:07:e0:af [ether] on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0
raw@test-server:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=5.92 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=6.13 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=6.13 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=6.13 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3008ms
rtt min/avg/max/mdev = 5.929/6.083/6.138/0.118 ms

몇 분 후에 다시 사라졌습니다.

$ arp -an
? (X.X.X.1) at <incomplete> on eth0
? (Y.Y.Y.1) at cc:e1:7f:07:e0:af [ether] PERM on eth0

답변1

arp데이터 센터 운영자는 라우팅 작동 방식을 잘 이해하지 못하는 것 같으므로(이 작업을 수행하려면 서브넷 내부에 게이트웨이가 필요함) 게이트웨이의 MAC 주소와 IP 주소가 포함된 정적 더미 항목을 추가해야 합니다.서브넷 내에서(사용 중이 아닙니다!)

사용되지 않은 YYY0/28 주소 중 하나를 사용하고 그것이 게이트웨이인 것처럼 가장합니다(어쩌면 그럴 수도 있습니다).~해야 한다어쨌든 YYY1). 해당 IP 주소를 라우팅 테이블의 게이트웨이로 사용하십시오. 이제 가상 머신이 arp 요청(하드웨어 주소는 이미 ARP 테이블에 있음)을 방해하지 않도록 arp해당 주소로 정적 항목을 할당하고 이를 게이트웨이로 보냅니다.arp -s Y.Y.Y.x c8:60:00:5e:bd:e0

설명하다:

일반적으로 시스템이 해당 서브넷의 다른 호스트에 연결하려고 하면 시스템은 ARP를 사용하여 요청된 IP 주소가 있는 MAC 주소를 찾습니다. 그런 다음 호스트는 ARP 요청에 응답합니다. 그렇지 않으면 "호스트에 연결할 수 없음" 오류가 발생합니다.

이제 어떤 이유로 인해 서브넷에 없는 호스트(게이트웨이 라우터)가 생겼습니다. 라우터를 통해 IP 패킷을 서브넷 외부의 대상으로 전송하기만 하면 스푸핑된 IP 주소를 사용할 수 있고 스푸핑된 IP 주소를 사용하는 라우터에 대한 고정 ARP 테이블 항목을 생성할 수 있습니다. 이제 이 라우터로 이동(또는 통과)해야 하는 모든 트래픽은 시스템이 ARP 브로드캐스트를 통해 해당 MAC 주소를 검색할 필요 없이 올바른 MAC 주소로 전송됩니다.

이 방법으로 프린터 게이트웨이 상자를 성공적으로 구성했습니다. MAC 주소와 사용 가능한 로컬 IP 주소를 정적 ARP 항목으로 입력한 다음 해당 주소에 텔넷으로 연결하여 올바르게 구성했습니다.

관련 정보