Docker 네트워크에서 들어오는 트래픽을 라우팅하려고 합니다. Wireguard가 실행 중이며 대상을 기반으로 VPN을 통해 모든 트래픽을 라우팅하는 문서의 예와 달리 일부 트래픽만 라우팅하려고 합니다. 소스 네트워크, 정책 라우팅, 대상을 기반으로 합니다.
기본적으로 동일한 네트워크나 내 LAN으로 돌아가는 트래픽을 제외하고 10.30.0.0(도커 브리지 네트워크)에서 wg0 인터페이스를 통과하는 모든 트래픽을 원합니다. 따라서 기본적으로는 아웃바운드 인터넷 트래픽입니다.
나는 그것을 작동하고 있습니다 ... 일종의 ... 정적 경로를 사용합니다.
post-up ip rule add from 10.30.0.0/16 table 200
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200
post-up ip route add 192.168.0.0/16 via 192.168.0.1 table 200
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200
10.30.0.0에서 들어오는 모든 트래픽에 대해 테이블 200을 사용하면 기본 경로는 wg0을 통과합니다. 대체 경로는 wg0이 다운되는 경우 블랙홀, 킬 스위치입니다.
다음 두 경로는 wg0 주변의 내부 모든 라우팅을 처리합니다. 그렇지 않으면 컨테이너가 네트워크에서 서로 통신할 수 없거나 웹 GUI에 액세스할 수 없습니다. 이것은 완벽하게 작동합니다.
단, /etc/network/interfaces.d/wg0에서 이러한 경로를 호출하여 인터페이스가 적절한 경로로 부팅 시 생성되고 시작되도록 합니다. 이 경로를 제외하고는 모두 괜찮습니다.
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200
wg0이 나타날 때 docker 브리지가 아직 작동하지 않아 게이트웨이가 누락되어 경로를 생성할 수 없기 때문에 실패합니다. 당분간 나는 그것을 함께 해킹하고 cron에서 "@reboot"를 사용하여 docker 네트워크가 가동된 후 이 경로를 불러왔습니다.
더 우아한 솔루션이 있습니까? 나는 10.30.0.0 또는 192.168.0.0으로 향하지 않는 10.30.0.0에서 오는 모든 패킷과 (iptables -s 10.30.0.0/16 ! -d 192.168.0.0/16 등)을 사용하지 않도록 표시하려고 생각했습니다. 그 길은 알 수 없지만 평생 동안 그 길을 알 수는 없습니다.
도움을 주셔서 감사합니다
답변1
테이블 200에 경로를 포함하는 대신 해당 로컬 경로에 대한 기본 테이블을 호출하여 문제를 해결했습니다.
post-up ip rule add from 10.30.0.0/16 table 200
post-up ip rule add from 10.30.0.0/16 to 192.168.0.0/16 table main
post-up ip rule add from 10.30.0.0/16 to 10.30.0.0/16 table main
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200