如何设置 ubuntu 主机来为私有子网上的访客提供互联网?

如何设置 ubuntu 主机来为私有子网上的访客提供互联网?

作为一名开发人员,我试图在 ubuntu 22 主机 (virtualbox) 上设置 vm guest 以便能够访问 Internet。问题是我没有在同一个私有子网上运行外部路由器,所以我想我还需要在主机上设置“路由器/网关”功能以正确连接两个世界 (?)。

为了给您提供背景信息,我正在尝试迁移我当前的(旧)设置,如下所示:

(Internet) <--> asus router (static public ip a.b.c.d, gateway + dhcp for internal subnet 192.168.84.1) <--> ubuntu host (192.168.84.107) <--> vm guests (192.168.84.xxx)

当前(旧)主机上的配置是一个简单的桥(封装物理 eth0),网关设置为 192.168.84.1(华硕路由器),一切都运行正常。

我的新主机位于其他地方(它本身就是一个虚拟机,所以实际上我现在正在进行嵌套虚拟化,但我猜这与这个问题无关),它有自己的公共 IP(abc132/25)并使用远程网关(abc129)。因此没有路由器 192.168.84.1 来将虚拟机(使用 192.168.84.xxx)指向:

(Internet) <--> external router (a.b.c.129) <--> ubuntu host (public IP a.b.c.132/25) <--> vm guests (192.168.84.xxx)

我已尝试过(如果需要,我将编辑问题并提供 netplan、ifconfig、ip route 和其他转储,但现在我只是想问问我尝试做的事情是否可行):

  1. 编辑了 netplan:从“eth0”接口中删除所有设置,创建了封装它的桥接器“br0”,并将设置放在那里(地址、名称服务器、路由)。我还将 ip 192.168.84.1 添加到地址中,因此现在 br0 有两个 ip(原始公共 abc132/25 和子网网关的 192.168.84.1/24)

  2. 将虚拟机设置为使用桥接适配器(并为其分配静态 IP 192.168.84.x)

  3. 安装 isc dhcp 服务器并将其配置为管理接口“br0”和子网 192.168.84.0(掩码 255.255.255.0),使用路由器 192.168.84.1

当前状态:

  • a)主机可以访问互联网
  • b)主机可以访问所有来宾(使用他们的 192.168.84.x ips)
  • c) 客人可以联系其他客人
  • d)客人可以访问主机(使用192.168.84.1)
  • e) 客人无法访问互联网 - ping 甚至显示“配置错误”(?) 接口(可能是因为 br0 同时使用公共和内部网关 ips?):

From 192.168.84.1: icmp_seq=3 Redirect Host(New nexthop: a.b.c.129)

我认为我缺少了将本地 dhcp/路由连接到外部网关的一个部分,但是我不知道该在哪里进行更改(以及排列组合)。

任何帮助将不胜感激!

谢谢。

答案1

正如通常的情况一样,我已经非常接近解决方案了,唯一缺少的部分是 NAT 规则:

iptables -t nat -A POSTROUTING -4 -s 192.168.84.0/24 -j MASQUERADE

添加此规则可将客户虚拟机连接到互联网,从而解决问题。

这是我的上下文完整配置:

网络计划.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      set-name: eth0
  bridges:
    br0:
      interfaces:
        - eth0
      dhcp4: true
      dhcp6: false
      optional: true
      addresses:
        - a.b.c.132/25
        - 192.168.84.1/24
      nameservers:
        addresses:
          - 8.8.8.8
      routes:
        - to: default
          via: a.b.c.129

dhcpd配置文件

subnet 192.168.84.0 netmask 255.255.255.0 {
  range 192.168.84.102 192.168.84.200;
  option routers 192.168.84.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.84.255;
  option domain-name-servers 8.8.8.8;
}

isc-dhcp 服务器

INTERFACESv4="br0"

希望这对任何人都有帮助。

相关内容