혼합 루프백/인터페이스 UDP 요청

혼합 루프백/인터페이스 UDP 요청

이 질문에 대한 가장 정확한 위치인지 확실하지 않습니다. 그렇지 않은 경우 알려주시면 이동하겠습니다.

내 설정은 다음과 같습니다. slirp4netns를 사용하여 뿌리 없는 Podman 컨테이너에서 pihole을 실행합니다.

pihole 서비스는 컨테이너 내부의 포트 53에서 실행됩니다. 컨테이너는 호스트의 포트 3953을 포트 53으로 매핑합니다. 나는 nftables 규칙을 사용했고 이 모든 것이 잘 작동하도록 했습니다.

이것은 작동합니다(pihole은 HostA-10.10.10.5에서 실행 중입니다).

HostB --DNS (UDP/TCP:10.10.10.5:3953)--> HostA:3953 --> Container = valid response
HostA --DNS (UDP/TCP:10.10.10.5:3953)--> HostA:3953 --> Container = valid response
HostA --DNS (TCP:127.0.0.1:3953)--> HostA:3953 --> Container = valid response
HostA --DNS (UDP:127.0.0.1:3953)--> HostA:3953 --> Container = timed out
Container -- DNS (UDP:127.0.0.1:53) --> valid response.

컨테이너를 실행하고 tcpdump를 실행하면 모든 요청에 ​​UDP 요청이 있지만 HostA에서 127.0.0.1로의 요청이 응답을 받지 못하는 것을 볼 수 있습니다. 이것은 내 tcpdump입니다.

#Internal To Container: success
01:04:18.425902 lo    In  IP 127.0.0.1.60839 > 127.0.0.1.53: 57697 [1au] A? pihole.home. (52)
01:04:18.426008 lo    In  IP 127.0.0.1.53 > 127.0.0.1.60839: 57697* 1/0/1 A 10.10.10.5 (52)
#External to Host: (from HostB): success
01:04:35.044972 tap0  In  IP 10.10.10.6.55428 > 10.0.2.100.53: 63205+ [1au] A? pihole.home. (52)
01:04:35.045154 tap0  Out IP 10.0.2.100.53 > 10.10.10.6.55428: 63205* 1/0/1 A 10.10.10.5 (56)
#Host loopback (hostA 127.0.0.1): Failed.
01:04:23.666449 tap0  In  IP 127.0.0.1.34179 > 10.0.2.100.53: 27771+ [1au] A? pihole.home. (52)
01:04:28.689778 tap0  In  IP 127.0.0.1.50000 > 10.0.2.100.53: 27771+ [1au] A? pihole.home. (52)

그리고 파이홀에 통나무가 보이지 않아 과연 통과할 수 있을지 의문이 듭니다.

제가 생각하기에 흥미로운 점은 HostA 루프백의 인터페이스는 tap0이지만 IP는 127.0.0.1이라는 것입니다. 경로가 좀 이상한 것 같은데요?

이것은 컨테이너의 인터페이스입니다(출력: ) ip -br a.

lo               UNKNOWN        127.0.0.1/8
tap0             UNKNOWN        10.0.2.100/24

내 "로컬" 라우팅 테이블은 다음과 같습니다. ( # ip ro sh table local):

local 10.0.2.100 dev tap0 proto kernel scope host src 10.0.2.100 
broadcast 10.0.2.255 dev tap0 proto kernel scope link src 10.0.2.100 
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1

이것은 나의 "기본" 라우팅 테이블입니다: (# ip ro sh table main)

default via 10.0.2.2 dev tap0 
10.0.2.0/24 dev tap0 proto kernel scope link src 10.0.2.100

요청이 127.0.0.1로 들어오지만 루프백 대신 Tap0 인터페이스에서 들어오기 때문에 문제가 발생하지 않았는지 궁금합니다.

컨테이너의 라우팅 테이블을 사용하여 이 문제를 해결할 수 있나요? 아니면 이 문제를 해결할 수 있는 다른 방법이 있나요?

관련 정보