Linux 네트워크 브리지는 수동으로 생성된 패킷을 전달하지 않습니다.

Linux 네트워크 브리지는 수동으로 생성된 패킷을 전달하지 않습니다.

BPF 프로그램을 사용하여 패킷 전달을 구현하려고 합니다. 아이디어는 적절한 패킷을 veth1(ingress)에서 (egress)로 직접 전달하는 것입니다 veth2. 내가 직면하고 있는 문제는 리디렉션된 패킷이 브리지에 의해 삭제되는 것 같다는 것입니다 v-net-1. Wireshark를 사용하여 트래픽을 분석했는데 패킷이 veth2예상대로 나가고 들어오지만 도착하지 않습니다.veth2-brveth3-br

이제 이유를 잘 이해할 수 없는 일이 일어나고 있습니다. 첫 번째는 BPF 프로그램을 끄고 사용자 공간 프로그램에서 패킷을 빌드하게 하면 패킷의 대상 IP 주소는 192.168.11.10브리지() 중 하나이지만 IP 주소를 이해하는 방식은 끝이라는 것입니다. 즉, 패킷( 192.168.11.1)에는 클라이언트의 IP 주소가 있어야 하며, 패킷을 라우팅하는 동안 MAC 주소만 변경됩니다. 두 번째는 내 BPF 프로그램(정확히 동일한 MAC 및 IP 항목 포함)에 의해 생성된 패킷이 그곳으로 전송되지 않는 veth3-br반면, 사용자 공간 프로그램에 의해 생성된 패킷은 그곳으로 전송된다는 것입니다. UDP 포트는 내 시도의 유일한 차이점이지만 브리지가 l4 프로토콜을 고려하지 않기 때문에 이것이 드롭의 원인이 될 수 없다는 것을 이해합니다.

설정은 다음과 같습니다:

   _______________________________________              ______________________
  |            Relay namespace            |            |   Client namespace   |
  |    ______________   ______________    |            |     ____________     |
  |   | 192.168.10.2 | | 192.168.11.2 |   |            |    |192.168.11.1|    |
  |___|____veth1_____|_|____veth2_____|___|            |____|____veth3___|____|
                              \                                   /
                               \                                 /
                                \                               /
                                 \                             /
                                __\ _________________________ /
                               /veth2-br|            |veth3-br\
                               |                              |
                               \__________v-net-1_____________/
                                             /
                                   ip: 192.168.11.10
                                   net: 192.168.11.0/24

릴레이 네임스페이스의 링크 정보는 다음과 같습니다.

9: veth1@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether a2:85:a2:09:2a:77 brd ff:ff:ff:ff:ff:ff link-netnsid 0
14: veth2@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether ce:b8:3f:d5:f3:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0

전역 네임스페이스의 링크 정보는 다음과 같습니다.

10: v-net-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether d6:06:cb:05:65:62 brd ff:ff:ff:ff:ff:ff
11: veth3-br@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master v-net-1 state UP mode DEFAULT group default qlen 1000
    link/ether a6:bc:ae:a2:75:8f brd ff:ff:ff:ff:ff:ff link-netns client_ns
13: veth2-br@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master v-net-1 state UP mode DEFAULT group default qlen 1000
    link/ether 0a:85:99:6c:80:1f brd ff:ff:ff:ff:ff:ff link-netns relay_ns

클라이언트 네임스페이스에 대한 링크 정보는 다음과 같습니다.

12: veth3@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether f2:51:1c:4c:2b:0b brd ff:ff:ff:ff:ff:ff link-netnsid 0

브리지 전달 데이터베이스는 다음과 같습니다.

33:33:00:00:00:01 self permanent
01:00:5e:00:00:6a self permanent
33:33:00:00:00:6a self permanent
01:00:5e:00:00:01 self permanent
33:33:ff:05:65:62 self permanent
01:00:5e:00:00:fb self permanent
33:33:00:00:00:fb self permanent
d6:06:cb:05:65:62 vlan 1 master v-net-1 permanent
d6:06:cb:05:65:62 master v-net-1 permanent

관련 정보