私は根のないPodmanコンテナとして実行されているWebサーバーとしてサーバーを実行します。ルートレスコンテナとして、ポート80と443は露出を許可されていないため、ポート10080と10443は公開されます。
外部から自分のウェブサイトにアクセスできるようにufwをファイアウォールとして使用し、そこにポート転送を設定します。そのために、ファイルの先頭に次の行を追加しました/etc/ufw/before.rules
。
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 10080
-A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 10443
COMMIT
今まではそんなに良くなった。
今Wireguardサーバーを実行している別のコンテナを実行したいと思います。これにより、ログに次の内容が出力され、ファイアウォールでルールに設定されているように見えます。
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.13.13.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.13.13.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
ufwファイアウォールを有効にせず、特にポート転送を定義せずにWireguardコンテナを実行すると、すべてがうまく機能します。クライアントに接続でき、そのトラフィックはトンネルを介してルーティングされ、インターネットに到達します。
一方、ufwファイアウォール(定義されたポート転送を含む)を有効にしてからクライアントを使用してWireguard VPNに接続すると、すべてのページビューが自分のサーバー自体に到達するように見えます。少なくとも、次のエラーメッセージが表示されます。
This server could not prove that it is www.google.de. Its security certificate comes from <myServer>.de
ufwファイアウォールを構成する方法
- 外部からポート 80 または 443 に要求すると、ポート 10080 または 10443 に転送され、私の Web サーバーに到達します。
- 私のVPNクライアントからの要求は、私のサーバーではなくWireGuardトンネルを介してインターネットに転送されますか?
(他のサーバーでは、Dockerの下でWebServerとWireGuardを実行しています。Docker WebServerはポート80と443を直接公開しているため、すべてがうまく機能するため、ポート転送は不要です。)
助けてくれてありがとう。
答え1
もう一度考えた後、解決策は簡単でした。宛先が私のサーバーIPの場合にのみポート転送を実行したため、before.rulesを次のように変更しました。
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -d <ServerIP> -p tcp --dport 80 -j REDIRECT --to-port 10080
-A PREROUTING -d <ServerIP> -p tcp --dport 443 -j REDIRECT --to-port 10443
COMMIT