AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1153731
Accepted
matthieusb
matthieusb
Asked: 2024-02-17 02:13:02 +0800 CST2024-02-17 02:13:02 +0800 CST 2024-02-17 02:13:02 +0800 CST

Dockerized http 服务无法从nordvpn meshnet 访问

  • 772

我正在设置一个家庭服务器(使用 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 或路由问题。在系统管理和网络方面,我几乎是一个菜鸟。任何帮助表示赞赏。

vpn
  • 1 1 个回答
  • 172 Views

1 个回答

  • Voted
  1. Best Answer
    Adam Frydrych - Meshnet
    2024-02-21T23:24:56+08:002024-02-21T23:24:56+08:00

    TL;WR - 在 Docker 计算机上的 Meshnet 中为应该能够访问容器的对等方启用本地网络访问权限。

    nordvpn meshnet peer local allow [command options] <peer_hostname>|<peer_nickname>|<peer_ip>|<peer_pubkey>
    

    例如

    nordvpn meshnet peer local allow adam.frydrych-everest.nord
    

    目前我们发现一个问题,如果 Docker 容器端口已经暴露给主机,仍然需要向 Peer 提供 Meshnet 内的本地网络访问权限,才能访问 Docker 容器内的服务。

    这是由于 Docker 通过在 PREROUTING 链中插入 iptables 规则来暴露端口造成的。

    此类规则的示例:

    -A DOCKER ! -i br-72e949c2a2f0 -p tcp -m tcp --dport 8004 -j DNAT --to-destination 172.24.0.2:80
    

    这意味着当数据包进入 INPUT/FORWARD 链时,它将被视为具有 172.16.0.0/16 子网内 Docker 定义的网络的 IP 地址(在本例中为 172.24.0.2)。因此,Meshnet 将根据预设规则丢弃此类数据包,这些规则设置为丢弃发往私有 IP 范围的流量,例如:

    169.254.0.0/16
    192.168.0.0/16
    172.16.0.0/12
    10.0.0.0/8
    

    换句话说,Meshnet 将 Docker IP 范围视为本地网络,这就是为什么您需要使用以下命令设置本地网络访问:

    nordvpn meshnet peer local allow [command options] <peer_hostname>|<peer_nickname>|<peer_ip>|<peer_pubkey>
    

    笔记:

    这是我的 NordVPN 白名单:

        Allowlisted subnets:
        172.0.0.0/8
        100.0.0.0/8
        192.168.50.0/24
    

    此白名单仅适用于 NordVPN 连接,不会更改 Meshnet 权限。

    如果 Docker 或本地子网记录已添加到允许列表中,请确保使用以下命令将其删除:

    nordvpn allowlist remove command [command options] [arguments...]
    

    此外,如果 NordVPN 已连接,请确保使用以下命令打开 LAN 发现:

    nordvpn set lan-discovery on
    
    • 1

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • 最好的点对点 VPN?

  • WAN 上的 VLAN

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve