조정 또는 탭 장치를 사용하여 네트워크 네임스페이스 간 연결

조정 또는 탭 장치를 사용하여 네트워크 네임스페이스 간 연결

나는 "전선"을 통해 전송된 모든 패킷을 볼 수 있고 나중에 수정할 수 있어야 하는 사용자 공간 프로그램을 통해 연결된 두 개의 탭 인터페이스를 만들려고 합니다. 이는 다른 호스트를 사용하고 TCP 연결을 통해 패킷을 전달할 때 작동하지만 두 TAP 인터페이스가 모두 동일한 호스트에 있을 때 이 설정에 문제가 발생합니다. 누군가가 작업을 수행하기 위해 별도의 네임스페이스를 사용하라고 제안했습니다.

그래서 내 생각은 다음과 같습니다.

  • 루트 네임스페이스에 tun1을 설정합니다.
  • 루트 네임스페이스에 tun2를 설정합니다.
  • 사용자 공간 프로그램을 사용하여 둘을 연결합니다(아래 POC에서는 socat을 사용하고 있습니다).
  • tun1을 새 네임스페이스 ns1로 이동
  • tun2를 새 네임스페이스 ns2로 이동
  • ns1 또는 ns2 인터페이스 간 Ping

그러나 이렇게 하면 Tap fd에 쓸 때 socat(또는 다른 사용자 공간 "커넥터")에서 IO 오류가 발생합니다. 어떻게 해야 하나요?

내 POC 코드는 다음과 같습니다.

openvpn --mktun --dev tun1 --user timos
openvpn --mktun --dev tun2 --user timos

ip link set dev tun1 up
ip link set dev tun2 up

ip addr add 192.168.1.1/24 dev tun1
ip addr add 192.168.1.2/24 dev tun2

socat TUN:192.168.1.1/24,tun-name=tun1 TUN:192.168.0.2/24,tun-name=tun2 &

ip netns add ns1
ip netns add ns2

ip netns exec ns1 ip link set dev lo up
ip netns exec ns2 ip link set dev lo up

ip link set tun1 netns ns1
ip link set tun2 netns ns2

ip netns exec ns1 ip link set dev tun1 up
ip netns exec ns2 ip link set dev tun2 up

ip netns exec ns1 ip addr add 192.168.1.1/24 dev tun1
ip netns exec ns2 ip addr add 192.168.1.2/24 dev tun2

ip netns del ns1
ip netns del ns2

비슷한 질문에 대한 답변TUN/TAP 인터페이스만 사용하여 네트워크 네임스페이스 간에 패킷을 보낼 수 있습니까?이것이 작동해야 한다는 것을 나타내는 것 같지만 재현할 수 없습니다.

관련 정보