다른 네임스페이스에서 액세스 가능한 macvlan 별칭을 만드는 방법은 무엇입니까?

다른 네임스페이스에서 액세스 가능한 macvlan 별칭을 만드는 방법은 무엇입니까?

나는 가지고있다

  • eth0내 기본 네트워크 네임스페이스의 인터페이스 이름
  • 다른 인터페이스 이름은 jail0대체 네트워크 네임스페이스(name name0)에 있습니다. 이 네임스페이스는 감옥 환경에서 사용됩니다.
  • jail0macvlan 별칭eth0.

메인 시스템과 감옥 모두에서 네트워크에 문제가 없는 것으로 보입니다.

하지만,서로 ping할 수 없습니다..

왜 그럴까요? 나는 그들이 접근할 수 있도록 만들고 싶습니다.

다른 네트워크 인터페이스의 네임스페이스에는 네트워크 인터페이스가 없습니다.

답변1

허용되는 답변을 완성하려면 브리지 모드가 가장 간단한 방법이지만 통신에는 충분하지 않습니다.

감옥 인스턴스가 호스트에 ping을 시도하면 IP를 얻기 위해 ARP 요청을 보냅니다. 호스트에 macvlan 인스턴스가 없기 때문에 패킷은 물리적 링크에서 직접 전송됩니다(브리지 모드 정의에 따른 결과). 호스트는 이 패킷을 볼 수 없으므로 응답할 수 없습니다. 핑 응답이 없습니다. 다른 방법은 동일합니다. 호스트는 모든 패킷을 실제 물리적 LAN으로 보내고 호스트가 없는 패킷은 컨테이너의 macvlan 인터페이스(감옥...)로 이동합니다.

비결은 호스트에 대해 역시 브리지 모드에서 두 번째 macvlan 인터페이스를 생성하는 것입니다. 이렇게 하면 호스트의 트래픽이 컨테이너/감옥과 통합됩니다.

host# ip link add link eth0 name hostmvl0 type macvlan mode bridge

그런 다음 두 가지 방법이 있습니다.

  • 두 인터페이스 모두에서 동일한 IP

    pro: eth0 또는 해당 설정이 변경되지 않으므로 호스트의 DHCP에 문제가 없습니다.
    단점: 다소 복잡하고 모든 곳에서 방송할 수 없습니다.

    호스트의 IP를 할당합니다(eth0과 동일).기본 LAN 경로 없음( noprefixroute) 그렇지 않으면 전체 호스트에 대한 라우팅을 혼동할 수 있습니다.

    host# ip addr add hostip/netmask dev hostmvl0 noprefixroute
    host# ip link set hostmvl0 up
    

    각 컨테이너(감옥...)에 대해 실제 인터페이스 대신 호스트의 macvlan 인터페이스를 통해 경로를 추가합니다.

    host# ip route add jailip/32 dev hostmvl0
    

    이제 모든 것이 잘 작동할 것입니다(컨테이너/감옥은 eth0에서 라우팅되므로 호스트의 브로드캐스트(ping, udp...)를 볼 수 없다는 점은 제외).

    참고: 새 인터페이스는 임의의 MAC 주소를 가져옵니다. 이는 생성 시 추가로 설정할 수 있지만 address xx:xx:xx:xx:xx:xx실제(eth0의) MAC 주소일 수는 없습니다. 교도소에서만 이 MAC 주소를 볼 수 있습니다.

  • 호스트 macvlan 인터페이스의 IP, 물리적 인터페이스에는 IP가 없습니다.

    장점: 네트워크 구성이 더 일반적이고 특별한 경우가 없으며(예: 호스트의 브로드캐스트가 모든 곳에서 유효함) 각 컨테이너에 대한 추가 라우팅 설정이 없습니다.
    단점: eth0의 네트워크 설정을 제거하고 hostmvl0으로 마이그레이션해야 합니다. MAC 주소는 변경되므로(다른 해킹을 통해 이를 방지하지 않는 한) DHCP 클라이언트가 영향을 받을 수 있습니다.

    sebasth가 제안한 대로 간단히 eth0에서 IP를 제거하고 새 "기본" 네트워크 카드를 hostmvl0으로 처리할 수 있습니다. 물론, 이를 관리하는 서비스가 있다면 거기에서 변경하세요. 항상 동일한 MAC 주소를 설정하는 것이 가장 좋습니다. 그렇지 않으면 재부팅할 때마다 네트워크에서 주소가 변경되므로 비즈니스 환경에서는 바람직하지 않습니다.

    host# ip addr del hostip/netmask dev eth0 #careful, connectivity is lost
    host# ip link set hostmvl0 address xx:xx:xx:xx:xx:xx
    host# ip addr add hostip/netmask dev hostmvl0
    host# ip link set hostmvl0 up
    host# ip route add default via usualrouterip
    

    DHCP를 사용하는 경우 MAC이 변경되고 IP도 변경됩니다. eth0의 MAC를 변경하여 원래 MAC를 hostmvl0에 재사용할 수 있습니다. 이 작업이 완료되면 일부 도구는 때때로 너무 똑똑해질 수 있습니다.이 Archlinux 토론NetworkManager가 설정을 복원하지 못하도록 방지하는 방법에 대한 정보가 있을 수 있습니다.

답변2

macvlan인터페이스는 두 macvlan 인스턴스 간에 전송되는 데이터가 처리되는 방식을 변경하는 다양한 모드에서 사용할 수 있습니다. 기본 모드는 vepa(Virtual Ethernet Port Aggregation)이므로 설정이 작동하지 않는 것일 수 있습니다.

구성할 수 있는 일반적인 패턴에 대한 간단한 설명:

  • vepa데이터는 물리적 인터페이스를 통해 전송되며 스위치는 macvlan 인스턴스 간의 통신을 지원해야 합니다.머리핀 패턴또는 패킷을 전달하는 IP 라우터가 있어야 합니다.

  • private외부 스위치가 헤어핀 모드를 지원하더라도 macvlan 인스턴스 간 통신은 허용되지 않습니다.

  • bridge인스턴스 간 직접 통신을 허용하며, macvlan 인스턴스 간 트래픽은 물리적 링크를 통해 전송되지 않습니다.

다음에서 macvlan을 사용하고 싶을 수도 있습니다.브리지 모드. macvlan 인스턴스와 네트워크 인터페이스 자체를 포함하는 네임스페이스 간의 통신을 위해서는 동일한(메인/호스트) 네트워크 네임스페이스에 macvlan 인스턴스를 생성해야 합니다. 자세한 내용과 설명은 다음을 참조하세요.AB의 답변.

전체 문서(및 기타 모드)는 다음을 참조하세요.man 8 ip-link.

관련 정보