
で Wireguard VPN を実行しているサーバーがあり10.0.1.254/24
、 で Docker が実行されています172.17.0.1/16
。
私のdocker-compose.yaml
見た目は次のようになります(簡略化):
services:
container_a:
image: nginx:latest
ports:
- '10.0.1.254:80:80'
container_b:
image: alpine:latest
wget http://10.0.1.254
これで、ホスト上で を使用して nginx にアクセスできます。VPN ピア (例10.0.1.1
) からも同じ方法でアクセスできます。ただし、別の Docker コンテナー (例 ) 内からこれを実行しようとすると、docker compose exec container_b wget http://10.0.1.254
タイムアウトが発生します。ただし、ホスト ( docker compose exec container_b ping 10.0.1.254
) に ping することはできます。
これは Docker がホスト上のポートをマップする方法と関係があるのではないかと思います。しかし、これに関する情報はあまり見つかりません。なぜこれが機能しないのか知っている人はいませんか?
答え1
結局、UFW がまだインストールされていて、wg0
インターフェースのこのポートへの着信接続を許可するように構成されていたことが判明しました。しかし、システムは十分にスマートで、インターフェースのこの ACCEPT ルールをバイパスして、ある仮想 Docker インターフェースから別の仮想 Docker インターフェースへ直接ショートカットを実行できましたwg0
。
tail +1f /var/log/ufw.log
私は を使用して、失敗したwget
コマンドを他の Docker コンテナから実行することでこれを理解しました。
私の場合、解決策はsudo ufw disable
、とにかく UFW ( ) を使用していないので、単に UFW を無効にすることでした。