Docker 突然停止与 Wireguard 协同工作,无法在构建期间获取 http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz

Docker 突然停止与 Wireguard 协同工作,无法在构建期间获取 http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz

Wireguard 和 Docker 在相同的配置下已经一起工作了很长一段时间,但是今天早上我开始工作时,却无法让我的 Docker 容器正确地与 AWS 通信。

我感觉这是我所在的共享办公空间的某种网络变化,与我的机器配置相冲突。我能够确认的唯一方法是,如果我关闭 WG,docker build + 运行容器会再次开始工作,或者如果我保持 WG 开启但连接到我手机的热点,它也会工作。

此外,我无法通过 docker-compose 构建容器。我能够复制该问题的最简单方法是通过:

jacob@jacob-ThinkPad-P52s:~$ docker run --rm -ti alpine apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz

使用 apk update 运行该容器最终会陷入无休止的挂起状态,并尝试获取 APKINDEX.tar.gz。如果我在主机操作系统上导航到相同的 URL,则不会遇到任何问题。

我在尝试从 Docker 容器内部联系 AWS SES 服务时遇到了类似的问题,这个问题一直挂起:

jacob@jacob-ThinkPad-P52s:~$ docker run --rm -ti alpine wget https://email.us-east-1.amazonaws.com
Connecting to email.us-east-1.amazonaws.com (54.157.160.123:443)

从主机执行相同操作会立即得到响应。容器在非默认 10.254.0.0/16 子网(IP 为 10.254.0.1)上运行。

共同工作空间使用 10.0.0.0/16 子网:

3: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 98:3b:8f:32:92:2c brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.24/16 brd 10.1.255.255 scope global dynamic noprefixroute wlp4s0
       valid_lft 80541sec preferred_lft 80541sec
    inet6 fe80::c263:54cf:5e8c:a865/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Wireguard 配置:

jacob@jacob-ThinkPad-P52s:~$ sudo wg showconf wg0
[Interface]
ListenPort = 51222
FwMark = 0xca6c
PrivateKey = <private key>
DNS = 172.31.0.2

[Peer]
PublicKey = <public key>
AllowedIPs = 0.0.0.0/0
Endpoint = <server ip>:41194
PersistentKeepalive = 15

其他一些可能有用的信息:

jacob@jacob-ThinkPad-P52s:~$ ip route
default via 10.1.0.1 dev wlp4s0 proto dhcp metric 600 
10.1.0.0/16 dev wlp4s0 proto kernel scope link src 10.1.1.24 metric 600 
10.254.0.0/16 dev docker0 proto kernel scope link src 10.254.0.5 
10.255.100.0/24 dev br-b06c6d86e92b proto kernel scope link src 10.255.100.1 
169.254.0.0/16 dev wlp4s0 scope link metric 1000 
172.30.0.0/21 dev wg0 proto kernel scope link src 172.30.0.2

jacob@jacob-ThinkPad-P52s:~$ uname -a
Linux jacob-ThinkPad-P52s 5.4.0-77-generic #86-Ubuntu SMP Thu Jun 17 02:35:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

jacob@jacob-ThinkPad-P52s:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:    20.04
Codename:   focal

说实话,我目前的能力已经远远超过了我的能力范围,在这里有点摸不着头脑。任何帮助解决问题的帮助都将不胜感激。

答案1

联合办公空间最近从 Charter 切换到 AT&T,我猜 Docker 上的 MTU 为 1500 有点太大了。似乎 AT&T 丢弃了碎片数据包,导致无限挂起。将 MTU 设置为较低的值 1420 可立即解决问题。

相关内容