라우터의 네임스페이스 사이에서 세 번째 네임스페이스를 InterVLAN으로 사용[닫기]

라우터의 네임스페이스 사이에서 세 번째 네임스페이스를 InterVLAN으로 사용[닫기]

ip add 10.0.0.1/24 gateway 10.0.0.254서로 다른 VLAN(10과 20)에 있는 2개의 네임스페이스(하나는 with , 다른 하나는 with ) 사이에 연결을 설정해야 합니다. ip add 20.0.0.1/24 gateway 20.0.0.254이들은 OVS 브리지에 연결되어 있고 세 번째 네임스페이스는 라우터 역할을 해야 합니다. 이것이 가능합니까? 이 인터페이스는 두 개의 인터페이스를 통해 브리지에 연결됩니다. 인터페이스 gw1 10.0.0.254와 다른 인터페이스 gw2 20.0.0.254를 할당했습니다. 브리지와 네임스페이스 1 및 gw1 사이의 인터페이스에 VLAN 태그를 할당하지 않았을 때 ICMP 응답을 받았지만 스위치 포트에 VLAN 태그를 할당했을 때 아무 일도 일어나지 않았습니다. 단지 "대상 호스트에 연결할 수 없습니다." ". Wireshark를 사용할 때 ARP가 응답을 얻지 못하는 것 같습니다. 내가 무엇을 놓치고 있나요?

네임스페이스를 만듭니다.

sudo ip netns add namespace1
sudo ip netns add namespace2
sudo ip netns add router

링크 만들기:

sudo ip link add vif1 type veth peer name ethns1
sudo ip link add vif2 type veth peer name ethns2
sudo ip link add vif11 type veth peer name gw1
sudo ip link add vif22 type veth peer name gw2

OVS 브리지를 생성하고 포트를 연결합니다.

sudo ovs-vsctl add-br switch
sudo ovs-vsctl add-port switch vif1
sudo ovs-vsctl add-port switch vif11
sudo ovs-vsctl add-port switch vif2
sudo ovs-vsctl add-port switch vif22

네임스페이스에 veth를 추가합니다.

sudo ip link set dev ethns1 netns namespace1
sudo ip link set dev ethns2 netns namespace2
sudo ip link set dev gw1 netns router
sudo ip link set dev gw2 netns router 

네임스페이스의 주소를 구성합니다.

sudo ip netns exec namespace1 ifconfig ethns1 10.0.0.1 netmask 255.255.255.0 up
sudo ip netns exec namespace1 route add default gw 10.0.0.254
sudo ip netns exec namespace2 ifconfig ethns2 20.0.0.1 netmask 255.255.255.0 up
sudo ip netns exec namespace2 route add default gw 20.0.0.254
sudo ip netns exec router ifconfig gw1 10.0.0.254 netmask 255.255.255.0 up
sudo ip netns exec router ifconfig gw2 20.0.0.254 netmask 255.255.255.0 up

인터페이스 설정:

sudo ip link set dev vif1 up
sudo ip link set dev vif2 up
sudo ip link set dev vif11 up
sudo ip link set dev vif22 up

네임스페이스 3(라우터)에서 IP 전달을 활성화합니다.

sudo ip netns exec router sysctl -w net.ipv4.ip_forward=1

아직 스위치 포트에 VLAN 태그를 추가하지 않았고 네임스페이스1에서 gw1에 연결할 수 있지만 그렇게 하면 다음과 같습니다.

sudo ovs-vsctl -- set port vif1 tag=10
sudo ovs-vsctl -- set port vif2 tag=20

이 두 가지에 대해서는 잘 모르겠습니다.

sudo ovs-vsctl -- set port vif22 trunk=10,20 
sudo ovs-vsctl -- set port vif11 trunk=10,20

그런 다음 아무 일도 일어나지 않았습니다 :(

저는 아직 Ubuntu를 처음 사용하기 때문에 도움을 찾고 있습니다.

답변1

이전에는 Open vSwitch를 사용해 본 적이 없었는데 이제는 한번 사용해 보아야 했습니다.

핵심 정보는 에 있으며 man 5 ovs-vswitchd.conf.db, 다양한 내용이 vlan_mode설명되어 있습니다.

특히,사용할 권리포트, 스위치 내부의 패킷에는 항상 태그가 지정되고, 스위치 외부에서는 태그가 지정되지 않으며 태그는 수신 시 추가되고 송신 시 제거됩니다. 설명을 듣고 그런 의심을 했는데 확실히 알 수 있어서 좋네요.

따라서 액세스 포트만 사용하여 시나리오를 구현하기 위해 다음 과 같은 세 개의 네임스페이스 ns0(라우터) 를 사용했습니다 .ns1ns2

ns0:
  veth0b (peer veth0a), 10.0.10.254/24
  veth0d (peer veth0c), 10.0.20.254/24

ns1:
  veth1b (peer veth1a), 10.0.10.1/24

ns2:
  veth2b (peer veth2a), 10.0.20.1/24

main namespace:
  br0 (ovs):
    veth0a (access, tag=100)
    veth0c (access, tag=200)
    veth1a (access, tag=100)
    veth2a (access, tag=200)

각 네임스페이스에서 시작하는 것이 매우 편리하며 xterm(저는 배경색을 선호합니다) tcpdump네임스페이스 내에서 패킷 흐름을 디버깅할 수도 있습니다.

set네임스페이스를 만들고, veth-pair를 만들고, 필요에 따라 네임스페이스로 이동하고, 모든 링크를 잊지 마세요 up. 그 다음에

존재하다 ns0:

sudo ip addr add 10.0.10.254/24 dev veth0b
sudo ip addr add 10.0.20.254/24 dev veth0d
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

존재하다 ns1:

sudo ip addr add 10.0.10.1/24 dev veth1b
sudo ip route add default via 10.0.10.254

존재하다 ns2:

sudo ip addr add 10.0.20.1/24 dev veth2b
sudo ip route add default via 10.0.20.254

기본 네임스페이스에서:

sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 veth0a tag=100
sudo ovs-vsctl add-port br0 veth0c tag=200
sudo ovs-vsctl add-port br0 veth1a tag=100
sudo ovs-vsctl add-port br0 veth2a tag=200

이제 각 네임스페이스에서 ping이 제대로 작동하여 직접 파트너를 먼저 테스트한 다음 라우팅 파트너를 테스트해야 합니다.

또한 두 개의 액세스 포트 veth-pair를 단일로 교체할 수도 있습니다.클러스터된맞아요. trunk=100,200기본적으로 각 비액세스 포트는 모든 VLAN에 대한 트렁크 포트이므로 추가할 필요가 없습니다 .

기본 네임스페이스에서:

sudo ovs-vsctl del-port br0 veth0a
sudo ovs-vsctl del-port br0 veth0c
sudo ip link del veth0a
sudo ip link del veth0c
sudo ip link add veth0a type veth peer name veth0b netns ns0
sudo ip link set veth0a up
sudo ovs-vsctl add-port br0 veth0a

존재하다 ns0:

sudo ip link add link veth0b name veth0b.100 type vlan id 100
sudo ip link add link veth0b name veth0b.200 type vlan id 200
sudo ip link set veth0b up
sudo ip addr add 10.0.10.254/24 dev veth0b.100
sudo ip addr add 10.0.20.254/24 dev veth0b.200

그런 다음 위와 같이 테스트해 보세요.

관련 정보