我有一個 docker-compose 檔案,其中有一個作為 NET_ADMIN 運行的 VPN,并且一堆其他容器的流量通過 VPN 容器路由。
問題是我只能從主機訪問其他容器的 Web API(通過 VPN 路由)。
version: "3.5"
services:
vpn:
image: ilteoood/docker-surfshark:latest
container_name: surfshark
env_file:
- .env
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
ports:
- 8080:8080
- 8085:8085
restart: unless-stopped
當我從主機連接到 http://localhost:8080/ 時,一切正常。當我通過http://192.168.1.6:8080(主機的 IP)從本地網路上的另一臺機器連接到容器時,連接超時。
此問題僅影響 VPN 容器(以及通過它路由的容器)。同一 docker-compose 檔案中未通過 VPN 容器路由的其他容器按預期作業。
主機在 Intel CPU 上運行 Pop!_OS 22.04。
編輯:容器內的路線:
# ip route list
0.0.0.0/1 via 10.8.8.1 dev tun0 default via 172.21.0.1 dev eth0
10.8.8.0/24 dev tun0 proto kernel scope link src 10.8.8.9
84.17.60.250 via 172.21.0.1 dev eth0 128.0.0.0/1 via 10.8.8.1 dev tun0
172.21.0.0/16 dev eth0 proto kernel scope link src 172.21.0.4 –
uj5u.com熱心網友回復:
這里的問題是您的容器正在使用 VPN 作為其默認路由:
- 來自您的本地
192.168.1.0/24網路的請求 - 容器內的服務發送回復
- 內核尋找一條合適的路由來到達
192.168.1.0/24網路,但沒有找到,所以它選擇了默認網關。 - 回復從 VPN 發出,它不知道如何處理
192.168.1.0/24目的地,因此回復被丟棄
最簡單的解決方案是通過常規 Docker 默認網關為本地網路添加顯式路由:
# ip route add 192.168.1.0/24 via 172.21.0.1
(這里我從分配給的地址推斷網關地址eth0。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/483957.html
上一篇:博客園測驗
