`veth` 가상 네트워크를 설정하는 방법


26

veth서로 통신 할 수있는 3 개의 가상 네트워크 인터페이스 ( ) 를 설정하고 싶습니다 . 세 개의 노드 클러스터를 시뮬레이션하기 위해 각 프로그램은 하나의 veth인터페이스에 바인딩됩니다 . 가능한 경우 LXC없이 수행하고 싶습니다.

나는 다음을 사용하려고 시도했다.

  • veth쌍을 만들었습니다 :sudo ip link add type veth
  • 다리를 만들다 sudo brctl addbr br0
  • 다리에 각 쌍 중 하나를 추가했습니다.
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • 인터페이스를 구성했습니다.
    • sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
    • sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
    • sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up

그런 다음 사용하여 작동하는지 확인 ping -I veth0 10.0.0.202했지만 다음과 같이 작동 하지 않습니다.

상기 I는 상기 IP 주소를 추가 veth1, veth3, veth5br010.0.1.x / 24 범위의 인터페이스. 그러나 그것은 도움이되지 않습니다.

어떤 아이디어? 또는 가이드, LXC와 함께 사용하는 방법에서 찾은 모든 것. 아니면 불가능한 것을 시도하고 있습니까?


br0자체까지?
grawity

그렇습니다. veth 's처럼 구성
Reinder

답변:


31

정맥이 작동하려면 터널의 한쪽 끝을 다른 인터페이스와 연결해야합니다. 이 모든 가상을 유지하려면 brm이라는 브리지에서 탭 유형 가상 인터페이스로 터널의 vm1 끝 (vm2는 터널의 다른 끝)을 브리지 할 수 있습니다. 이제 brm 및 vm2 (각각 10.0.0.1 및 10.0.0.2)에 IP 주소를 제공하고 다음을 통해 IPv4 전달을 활성화합니다.

echo 1 > /proc/sys/net/ipv4/ip_forward

모든 인터페이스를 가동시키고 커널에게 IP 주소 10.0.0.0/24에 도달하는 방법을 알려주는 경로를 추가하십시오. 그게 다야.

더 많은 쌍을 만들려면 다른 서브넷 (예 : 10.0.1.0/24, 10.0.2.0/24 등)으로 아래 단계를 반복하십시오. IPv4 전달을 활성화하고 커널 라우팅 테이블에 적절한 경로를 추가했기 때문에 서로 대화 할 수 있습니다.

또한 사용하는 대부분의 명령 (brctl, ifconfig, ...)은 더 이상 사용되지 않습니다. iproute2 제품군에는이 모든 작업을 수행하는 명령이 있습니다. 아래의 ip 명령 사용을 참조하십시오 .

이것은 veth 유형의 인터페이스를 사용하기위한 올바른 명령 순서입니다 .

먼저 필요한 모든 인터페이스를 만들고

ip link add dev vm1 type veth peer name vm2
ip link set dev vm1 up
ip tuntap add tapm mode tap
ip link set dev tapm up
ip link add brm type bridge

brm과 vm2는 IP 주소를 할당해야하기 때문에 가져 오지 않았지만 tapm과 vm1은 브리지 brm에 포함시키는 데 필요했습니다. 이제 인터페이스 tapm과 vm1을 브리지 brm에 종속시킵니다.

ip link set tapm master brm
ip link set vm1 master brm

이제 브리지와 나머지 veth 인터페이스 vm2에 주소를 제공합니다.

ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2

이제 vm2와 brm을 불러옵니다.

ip link set brm up
ip link set vm2 up

서브넷 10.0.0.0/24에 경로를 명시 적으로 추가 할 필요가 없으며 자동으로 생성되므로 ip route show로 확인할 수 있습니다 . 결과

ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms

또한, 거꾸로 할 수있는 즉, BRM에 VM2의 뒤쪽에서 :

ping -I 10.0.0.2 -c1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms

--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms

veth 종류 의 NIC의 가장 유용한 응용 프로그램은 Linux namespace (LXC)에서 사용되는 네트워크 네임 스페이스 입니다. 다음과 같이 nnsm이라는 것을 시작합니다.

ip netns add nnsm

그런 다음 vm2를 전송합니다.

ip link set vm2 netns nnsm 

우리는 lo 인터페이스를 가진 새로운 네트워크 네임 스페이스를 부여합니다 (절대적으로 필요합니다).

ip netns exec nnsm  ip link set dev lo up

메인 머신에서 NATting을 허용합니다.

iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

( eth0을 통해 인터넷에 연결된 경우 에는 다르게 변경) 새 네트워크 네임 스페이스에서 셸을 시작하십시오.

ip netns exec nnsm xterm & 

이제 새 xterm을 입력하기 시작하면 IP 주소가 10.0.0.2 인 별도의 가상 머신에 있지만 인터넷에 연결할 수 있습니다. 이것의 장점은 새로운 네트워크 네임 스페이스가 사용자 PC의 나머지 동안 수단, 예를 들어, 당신이 그것에 VPN을 시작할 수 있습니다 자신의 스택을 가지고 있다는 것입니다 하지 VPN을에 있습니다. 이것이 LXC의 기반이되는 contraption입니다.

편집하다:

vm2 인터페이스를 가져 오면 실수로 주소가 지워집니다. 따라서 xterm 내에서 다음 명령을 추가해야합니다.

ip addr add 10.0.0.2/24 dev vm2
ip link set dev  vm2 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

이제 xterm 내에서 탐색 할 수 있습니다.

ip명령도 함께 xterm을하기 전에 수행 할 수 있습니다

ip -netns nnsm addr add 10.0.0.2/24 dev vm2
ip -netns nnsm link set dev vm2 up
ip -netns nnsm route add default via 10.0.0.1

설명 주셔서 감사합니다. 나는 xterm에만 lo을 보았습니다 .vm2 인터페이스가 없습니다.
Reinder

다시 감사합니다. 나는 3 xterm 등의 설치에 스크립트를 만들고, 한 서로 :)에 캔 핑
레인 더

한 가지 문제 .... 한 xterm에서 UPD 브로드 캐스트를 보내면 다른 하나는 10.0.0.254 (brm)에서 패킷을 수신합니다. 내 스크립트는 다음을 참조하십시오 : here (주석에 게시 할 수 없음)
Reinder

내가 VM1을 가져 오는 문제가 최대 :( # IP 링크 추가 dev에 VM1 유형 veth 피어 명 VM2의 IP : RTNETLINK 답변 : SIOCGIFFLAGS : 파일은 IP까지 # IP 링크 설정 dev에 VM1을 존재하지 않는 그런 장치
resultsway

@ MariusMatutiae 나는 두 번 시도해야했기 때문에 첫 번째 명령에 동의하지만 어떻게 든 내 사본 붙여 넣기가 두 번째 (Imcom을 장치에 사용하고 있습니다)에 적합하지 않으므로 짧게 말하면 제안 된대로 정확하게 수행했습니다. 나는 iproute2 패키지가 없다고 생각한다.
resultsway

0

다음은 내가 사용하는 5 노드 브리지 설정입니다. ifconfig를 사용하여 NodeX 인터페이스에 주소를 할당 할 수 있어야합니다

ip link add dev Node1s type veth peer name Node1
ip link add dev Node2s type veth peer name Node2
ip link add dev Node3s type veth peer name Node3
ip link add dev Node4s type veth peer name Node4
ip link add dev Node5s type veth peer name Node5

ip link set Node1 up
ip link set Node2 up
ip link set Node3 up
ip link set Node4 up
ip link set Node5 up

ip link set Node1s up
ip link set Node2s up
ip link set Node3s up
ip link set Node4s up
ip link set Node5s up

brctl addbr Br
ifconfig Br up

brctl addif Br Node1s
brctl addif Br Node2s
brctl addif Br Node3s
brctl addif Br Node4s
brctl addif Br Node5s

청소

brctl delif Br Node1s
brctl delif Br Node2s
brctl delif Br Node3s
brctl delif Br Node4s
brctl delif Br Node5s
brctl delif Br Node1
brctl delif Br Node2
brctl delif Br Node3
brctl delif Br Node4
brctl delif Br Node5

ifconfig Br down
brctl delbr Br

ip link del dev Node1
ip link del dev Node2
ip link del dev Node3
ip link del dev Node4
ip link del dev Node5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.