我正在设置一个家庭服务器(使用 ubuntu 服务器 22.04),并在各个端口上部署多个服务。例如,我的主页服务器部署在3000端口。
当在本地网络上时:
- ssh访问正常
- 直接部署在服务器上的http服务就可以了
- 通过docker通过桥接网络部署的http服务是可以的
当我使用nordvpn网状网络时:
- ssh访问正常
- 直接部署在服务器上的http服务就可以了
- 通过 docker 使用桥接网络部署的 Http 服务不可访问
这是我的主页服务器的 docker compose
version: "3.9"
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- "3000:3000"
volumes:
- /config:/app/config
- /var/run/docker.sock:/var/run/docker.sock
environment:
PUID: $PUID
PGID: $PGID
networks:
- homepage_net
networks:
homepage_net:
driver: bridge
这是我的主要以太网接口:
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.XXX netmask 255.255.255.0 broadcast 192.XXX
ether XXX txqueuelen 1000 (Ethernet)
RX packets 257310280 bytes 326111324526 (326.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 157444527 bytes 168981936261 (168.9 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf3a00000-f3a20000
这是nordlynx 网络接口(Nordvpn 的网状网络功能创建它):
nordlynx: flags=81<UP,POINTOPOINT,RUNNING> mtu 1420
inet XXX netmask 255.255.255.255 destination XXX
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 236544852 bytes 298874606486 (298.8 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 52996561 bytes 13275751612 (13.2 GB)
TX errors 0 dropped 34313 overruns 0 carrier 0 collisions 0
这是我的路线:
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 enp0s25
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9066eab87b15
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-e7a37ce3a7bd
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-e6e5e235ac3b
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-64f3f670aea1
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f624ee4026b8
172.23.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-90ed8d1cb5ca
192.XXX 0.0.0.0 255.255.255.0 U 0 0 0 enp0s25
编辑:
这是我的 NordVPN 白名单:
Allowlisted subnets:
172.0.0.0/8
100.0.0.0/8
192.168.50.0/24
由于它在本地网络上运行,我认为这可能是 docker 或路由问题。在系统管理和网络方面,我几乎是一个菜鸟。任何帮助表示赞赏。
TL;WR - 在 Docker 计算机上的 Meshnet 中为应该能够访问容器的对等方启用本地网络访问权限。
例如
目前我们发现一个问题,如果 Docker 容器端口已经暴露给主机,仍然需要向 Peer 提供 Meshnet 内的本地网络访问权限,才能访问 Docker 容器内的服务。
这是由于 Docker 通过在 PREROUTING 链中插入 iptables 规则来暴露端口造成的。
此类规则的示例:
这意味着当数据包进入 INPUT/FORWARD 链时,它将被视为具有 172.16.0.0/16 子网内 Docker 定义的网络的 IP 地址(在本例中为 172.24.0.2)。因此,Meshnet 将根据预设规则丢弃此类数据包,这些规则设置为丢弃发往私有 IP 范围的流量,例如:
换句话说,Meshnet 将 Docker IP 范围视为本地网络,这就是为什么您需要使用以下命令设置本地网络访问:
笔记:
此白名单仅适用于 NordVPN 连接,不会更改 Meshnet 权限。
如果 Docker 或本地子网记录已添加到允许列表中,请确保使用以下命令将其删除:
此外,如果 NordVPN 已连接,请确保使用以下命令打开 LAN 发现: