概括

概括

概括

我是一名后端开发人员,但网络知识有限。我需要在我的计算机(Linux 主机)上本地测试由多个组件(各种 SIP 和媒体元素,SIP UA)组成的 SIP 系统。挑战在于,一些系统元素可以作为 VirtualBox VM(Windows 和 Linux 客户机)访问,而其他系统元素可以作为 Docker 容器(通过 Docker Engine 运行)访问。我试图实现的是配置我的本地主机(不是本地网络路由器)和/或 VM 和 Docker 客户机(如果需要)以确保 VM 可以与 Docker 容器通信,反之亦然。对于所有系统组件是否必须位于同一子网或多个不同子网中,我没有任何严格要求,只要满足以下条件即可:

  • 每个系统组件都可以通过自己的 IP 地址访问(许多 SIP 组件依赖于默认的 5060 端口)
    • 理想情况下(不是强制性的,但可以大大简化设置)可以预先指定 IP 地址(就像使用 Docker 自定义网桥一样),因为许多 SIP 服务器必须预先配置它们将监听的 IP 地址
  • 无需 NAT 即可进行交叉通信(处理媒体协议时,NAT 会使事情变得特别困难)。

细节

我目前拥有的:

  • Linux主机(PopOS 22.04)
    • 本地网络IP:192.168.200.232
    $ netstat -r
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    default         192.168.200.1   0.0.0.0         UG        0 0          0 wlp1s0
    link-local      0.0.0.0         255.255.0.0     U         0 0          0 wlp1s0
    172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
    192.168.200.0   0.0.0.0         255.255.255.0   U         0 0          0 wlp1s0
    
  • VirtualBox 6.1
    • Windows 11 来宾Windows 11 guest
    • 防火墙:已禁用
    • 网络设置:桥接适配器、wlp1s0、Intel PRO/1000 MT 服务器、启用混杂模式
    • IP地址:192.168.200.88
  • Docker 24.0.2
    • Linux 容器
    • 网络设置:使用默认Dockerbridge网络
    • IP地址:172.17.0.4
    # netstat -r
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    default         _gateway        0.0.0.0         UG        0 0          0 eth0
    172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 eth0
    

我能够从 Docker 容器 ping 虚拟机:

# ping 192.168.200.88
PING 192.168.200.88 (192.168.200.88) 56(84) bytes of data.
64 bytes from 192.168.200.88: icmp_seq=1 ttl=127 time=0.476 ms
64 bytes from 192.168.200.88: icmp_seq=2 ttl=127 time=0.677 ms

但反过来就不行:

> ping 172.17.0.4

Pinging 172.17.0.4 with 32 bytes of data:
Request timed out.

我尝试像这样向 Windows 客户机添加静态路由(这里 192.168.200.232 是我的主机 IP):

route add 172.17.0.0 MASK 255.255.0.0 192.168.200.232

这导致了以下 Windows 客户机netstat -r输出:

PS C:\Users\User> netstat -r
===========================================================================
Interface List
 15...08 00 27 7c 0c be ......Intel(R) PRO/1000 MT Network Connection
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.200.1   192.168.200.88     25
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
       172.17.0.0      255.255.0.0  192.168.200.232   192.168.200.88     26
    192.168.200.0    255.255.255.0         On-link    192.168.200.88    281
   192.168.200.88  255.255.255.255         On-link    192.168.200.88    281
  192.168.200.255  255.255.255.255         On-link    192.168.200.88    281
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link    192.168.200.88    281
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link    192.168.200.88    281
===========================================================================
Persistent Routes:
  None

IPv6 Route Table
===========================================================================
Active Routes:
 If Metric Network Destination      Gateway
  1    331 ::1/128                  On-link
 15    281 fe80::/64                On-link
 15    281 fe80::b2b0:9f8f:be31:e695/128
                                    On-link
  1    331 ff00::/8                 On-link
 15    281 ff00::/8                 On-link
===========================================================================
Persistent Routes:
  None

但它不起作用(可能是因为我的家用路由器上缺少额外的静态路由,但我想避免在路由器级别进行任何更改,因为我需要在不同的环境中复制此解决方案,并且我想将所有更改单独包含在主机上)

概括

以下是我想要实现的配置图表:

在此处输入图片描述

我试图使用直接在主机上运行的虚拟机和 Docker 容器来实现目标吗?如果可以,任何指点都将不胜感激!

答案1

使用以下命令运行所有容器--net=host 网络主机驱动程序 这样,您的所有组件都将位于同一网络上,并能够进行通信

答案2

编辑:完全忘记了您在本地需要它。您可能可以使用 VMWare 网络实现完全相同的功能。

  • 在 VMWare 网络编辑器中创建新的“仅主机”网络
    • 在那里禁用 DHCP 服务器
  • 将虚拟机 NIC 设置为该网络。手动分配 IP 地址
  • 在同一网络内创建一个新的 docker 网络( macVLAN 或 ipVLAN )
  • 手动为已部署的容器分配 IP 地址

以下是网络创建命令的示例:

docker network create --driver ipvlan --subnet 192.168.0.1/24 --gateway 192.168.0.254 --ip-range 192.168.0.254/28 --attachable --opt mode=l2 --opt parent=eth0 externalNetwork

允许我将 192.168.0.254/28(即 192.168.0.240 至 192.168.0.253)与我的 Docker 一起使用。我在路由器中保留了此段,因此它不会分配此段。

这是我的 Unraid(虚拟化和托管服务器)为 DNS 解析器 docker 运行的命令。所述 docker 应由我家中位于 192.168.0.1-192.168.0.254 网络上的其他物理设备访问

docker run
  -d
  --name='piholedocker'
  --net='externalNetwork'
  --ip='192.168.0.250'
  -e TZ="TIMEZONE"
  -e HOST_OS="Unraid"
  -e HOST_CONTAINERNAME="piholedocker"
  -e 'TCP_PORT_53'='53'
  -e 'UDP_PORT_53'='53'
  -e 'UDP_PORT_67'='67'
  -e 'TCP_PORT_80'='80'
  -e 'TCP_PORT_443'='443'

我将在这里留下我最初的评论以供参考:

您可以为虚拟机设置“外部”网络,并为容器使用 ipVLAN(或 macVLAN)。这就是我在家里做的事情,这样我就可以从网络中的所有设备联系 Vaultwarden 和 pihole dockers。

您可以:

  • 将路由器 DHCP 服务器段限制为 100 个主机,其中 50 个用于虚拟机,另外 100 个用于容器(数字仅用于举例)
  • YOLO 通过在常规段上运行所有内容(推荐给懒惰的家庭用户)
  • 在路由器中创建一个全新的网段。然后,根据 MA​​C 地址将其分配给虚拟机/容器(或手动分配)

无论如何,在办公室网络环境中,请事先联系 IT。最糟糕的情况是,他们会购买便宜的 TP-Link 路由器,将其插入他们的网络,然后在那里为您提供整个网段(例如,如果您的工作使用的是 192.168.xx/24,那么您将获得类似 172.16.xx/24 的东西)。

题外话:关于这些事情,总是尝试咨询 IT 部门!他们大多是好人,对网络(以及许多其他事情)有很好的理解。

相关内容