2016-06-24 3 views
0

여기 내 문제가 있습니다. 나는 리눅스에서 실행되는 3 개 가상 머신과 3 개 개의 다리 그들의 각자 (각 다리 하나) 두 개의 인터페이스를 가지고 예를 들어 있습니다다른 가상 머신을 통해 두 가상 머신간에 통신하십시오.

  • VM1 : BR2
  • VM2에 대한 BR0 및 I2에 대한 I0 : 대한 I1 BR0
  • 에 대한 BR1 및 I0
  • VM3 : BR2에 대한 BR1 및 I2에 대한 I1 여기

는 조건은 다음과 같습니다 - VM3에 VM1에서가는 패킷이 이동 - VM1 및 VM3는 VM2 를 통해 그들 사이에 통신 할 수있다

     <------- 
    ---------------------br2------------------- 
    |           | 
**VM1**----br0-----**VM2**-----br1--------**VM3** 
     ------>    --------> 

내 첫번째 생각은의 iptables 규칙에 NAT 감사를 사용했지만 패킷이 서로 다른 두 가지를 수행해야하기 때문에 나는 그것이 먹힐 모르겠지만 VM1에 VM3에서 패킷은 BR2 통과 - BR0 및 BR1 을 통해 방법 (BR0-BR1 및 BR2)

내 두 번째는 당신이 어떤 생각을 가지고 있습니까 scappy

와 파이썬 스크립트를 사용했다?

영어 불쌍한 학생들에게 죄송합니다. 보시다시피 저는 영어가 능숙하지 않습니다.

답변

0

모든 VM이 동일한 IP 서브넷에 있다고 가정하면 서로에게 직접 도달하려고합니다.

예를 들어, VM1이 VM2를 통해 VM3과 통신하도록 강제 설정하려고합니다. VM1이 VM3에 도달하는 방법을 알아 내면 arp 요청을 브로드 캐스트하고 VM3은 "여기 있습니다! 여기 내 Mac 주소는"입니다. 따라서 VM1은 IP 패킷을 VM3에 직접 보냅니다.

바보 VM1에 VM2 MAC 주소와 연결된 VM3 IP 주소가있는 항목을 arp 캐시에 추가하여 VM1을 바꿀 수 있습니다. 이미 대상의 MAC 주소를 알고 있기 때문에

arp -s <IP address> <mac address> 

그래서, VM1은 VM3 얘기가 지금 때, 그것은 , ARP 요청을하지 것 : 리눅스에서 당신과 함께 그렇게. VM3의 IP 패킷을 행복하게 VM2의 NIC에 보냅니다. 이 시점에서 VM2가 일부 패킷 포워딩을 허용하고 iptables 규칙이 그러한 것을 금지한다고 가정하면 패킷을 VM3으로 다시 보내 게됩니다.

다른 이유로도 필요하지 않으면 어쩌면 모든 다리가 필요하지 않을 수도 있습니다. 이 솔루션은 당신을 위해 작동하는 경우

, ARP 캐시 항목이 파일 /etc/network/interfaces에 줄을 추가하여 영구적으로을 만들 수 있습니다 :

up arp -s <IP address> <mac address> 

이런 식으로, ARP 캐시 항목마다 NIC를 설정 (예 : 기계가 부팅 될 때).

관련 문제