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