SharUpOff | Code
87 subscribers
38 photos
16 links
Download Telegram
На этой неделе столкнулись с любопытной проблемой: на Ubuntu 24.04 не устанавливается SSL-соединение из Docker-контейнера до некоторых хостов, если… Если запущен Wireguard.

Выглядит это так:

docker compose run --rm service curl -v https://example.com


* Trying 172.16.64.10:443...
* Connected to example.com (172.16.64.10) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSV1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs


⌛️ Здесь долго висит...

* Recv failure: Connection reset by peer
* OpenSSL SSL_connect: Connection reset by peer in connection to example.com:443
* Closing connection 0
curl: (35) Recv failure: Connection reset by peer


ℹ️ Дело в том, что WG для своего интерфейса устанавливает MTU 1420, оставляя 80 байт на собственный оверхед:

cat /sys/class/net/wg0/mtu


1420


Docker же использует стандартный размер пакета 1500 байт:

docker compose run --rm service cat /sys/class/net/eth0/mtu


1500


При такой конфигурации TLS handshake в некоторых случаях не влазит в целый пакет.

Беглое чтение документации подсказывает, что настройки WG можно трогать только в крайнем случае, а вот для Docker Compose значение MTU можно смело изменить.

✍️ Создадим файл:

cat > docker-compose.override.yml << EOF
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1420
EOF


👀 Проверим MTU:

docker compose down
docker compose run --rm service cat /sys/class/net/eth0/mtu


1420


✔️ Теперь запросы выполняются:

docker compose run --rm service curl -v https://example.com


HTTP/2 200


И никакой магии 🐰🎩

#docker #compose #wireguard #ubuntu #mtu #networking #issue #solved
Please open Telegram to view this post
VIEW IN TELEGRAM
👏7