我在我的家庭实验室 (esx Server) 中使用 Ubuntu Server Ubuntu 22.04.2 LTS 来测试一些 docker 应用程序。首先,我测试了 Bitwarden,一个基于 Web 的密码管理器。没有任何成功。我无法在本地网络中访问 bitwarden 页面。然后我安装了一个全新的 ubuntu 服务器来测试 Keeweb,也是一个基于 Web 的密码管理器。也安装了 docker,一切都有教程。但我无法通过我的网络访问 keeweb 页面。nc -zv 192.168.0.137 443 Connection to 192.168.0.137 443 port [tcp/https] succeeded!
我可以看到端口 443 是开放的。但是当我尝试https://192.168.0.137从我本地网络中的任何其他系统都无法正常工作。我不认为我的本地网络存在任何问题,因为我还运行带有 PRTG 监控系统的 Windows VM,并且我可以通过我的本地网络访问该网页。
Powershell 提示端口 443 和 80 未打开。UFW 最初处于禁用状态,但为了测试目的,我启用了它并设置了一些允许所有内容的规则:
To Action From
-- ------ ----
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
Anywhere ALLOW IN Anywhere
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
Anywhere (v6) ALLOW IN Anywhere (v6)
Anywhere ALLOW OUT Anywhere
Anywhere (v6) ALLOW OUT Anywhere (v6)
我的docker容器也正在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
625e33e7d24d antelle/keeweb "/opt/entrypoint.sh …" About an hour ago Up About an hour 192.168.0.137:80->80/tcp, 192.168.0.137:443->443/tcp keeweb
并由以下人员运行:
sudo docker run --name keeweb -d -p 192.168.0.137:443:443 -p 192.168.0.137:80:80 antelle/keeweb
第一次尝试时,我没有设置 192.168.0.137,只是设置端口。
这是 iptables 输出:
sudo iptables -L -t nat
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere !localhost/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 anywhere
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:https
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:http
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- anywhere anywhere
DNAT tcp -- anywhere bitwarden-2 tcp dpt:https to:172.17.0.2:443
DNAT tcp -- anywhere bitwarden-2 tcp dpt:http to:172.17.0.2:80