나가는 도커 패킷이 라우팅 규칙을 따르지 않습니다.

나가는 도커 패킷이 라우팅 규칙을 따르지 않습니다.

Wireguard 터널을 통해 클라우드 환경의 공용 "라우터"(B)에 연결된 개인 Docker 호스트(A)가 있습니다.

라인배커:

(Docker Container)
eth0 172.17.0.2
|
docker0 172.17.0.1
(A) eth0 192.168.1.2 --- Internet (can't accept conns)
wg0 10.0.16.6
|
wg0 10.0.16.5
(B) 
eth0 public IP Q
|
USER

아이디어는 트래픽이 먼저 공용 IP를 통해 B에 도달한 다음 요청을 B로 전달하고 응답을 다시 전달하는 것입니다.

나는 팔로우했다이 가이드, 특히 정책 라우팅 부분이 그렇습니다.

A의 와이어가드 구성은 다음과 같습니다.

[Interface]
Address = 10.0.16.6/30
Table = 123

PreUp = ip rule add from 10.0.16.6 table 123 priority 456
PostDown = ip rule del from 10.0.16.6 table 123 priority 456

[Peer]
AllowedIPs = 0.0.0.0/0
Endpoint = Q:51820
PersistentKeepalive = 30

소스가 10.0.16.6이고 목적지가 원래 보낸 사람인 패킷은 다음 규칙에 따라 wg0 인터페이스를 통해 라우팅되어야 합니다.

0:  from all lookup local
456:    from 10.0.16.6 lookup 123 ### This one
32766:  from all lookup main
32767:  from all lookup default

따라서 A에서는 B의 패킷이 wireguard 인터페이스(대상 주소 10.0.16.6)에서 들어오고 docker http 서버로 올바르게 라우팅됩니다.

그런 다음 응답 패킷이 도커 컨테이너에서 A로 반환되면 컨테이너의 소스 주소를 갖게 됩니다. 이는 위의 라우팅 규칙이 http 서버가 호스트 A에서 실행 중인 경우와 마찬가지로 존중되지 않음을 의미합니다.

패킷은 라우팅 후 NAT로 종료되고 A wg0 대신 A eth0으로 전송됩니다.

NAT 단계 후에 패킷이 다시 라우팅되기를 원합니다.

Docker 컨테이너에서 나가는 모든 일반 트래픽은 wg0 인터페이스를 통과해서는 안 되며, 참조 가이드에서 권장하는 대로 wg0 인터페이스에서 들어오는 트래픽만 통과해야 합니다.

iptables -L추가 정보가 필요한 경우 등을 제공해 드리겠습니다.

답변1

네가 원한다면모두Docker 컨테이너의 트래픽이 Docker 호스트의 WireGuard 연결 밖으로 나가려면 앞에서 설명한 정책 라우팅 기술을 사용할 수 있습니다.도커 컨테이너정책 라우팅 규칙의 IP 주소:

ip rule add from 172.17.0.2 table 123 priority 456

이것Docker 호스트의그러나 IP 주소는 SNAT가 적용되므로 컨테이너에서 전달되는 트래픽을 라우팅하는 이 규칙에는 적합하지 않습니다.뒤쪽에호스트가 라우팅 결정을 내렸습니다.

그러니 당신이 필요하다면트래픽만 반환WireGuard 연결에서 발생한 데이터를 WireGuard 연결로 다시 라우팅하려면 Docker 호스트에서 연결 태그를 사용해야 합니다. 이 기술의 핵심은 세 가지 단계입니다.

  1. WireGuard 인터페이스를 통해 들어오는 새 연결에 대해 사용자 정의 연결 플래그를 설정합니다.

     iptables -t mangle -A PREROUTING -i wg0 -m state --state NEW -j CONNMARK --set-mark 1
    
  2. 나가는 연결에서 연결 태그를 패킷 태그에 복사합니다.

     iptables -t mangle -A PREROUTING ! -i wg0 -m connmark --mark 1 -j MARK --set-mark 1
    
  3. 정책 라우팅 규칙의 패킷 태그를 사용하여 패킷을 WireGuard 인터페이스로 다시 라우팅합니다.

     ip rule add fwmark 1 table 123 priority 456
    

자세한 지침과 고려 사항은 링크된 가이드의 "중간 서버에서 Connmark" 섹션을 참조하세요.인터넷에서 다른 네트워크로의 WireGuard 포트 전달.

관련 정보