在 Ubuntu 18.04 下提供 DHCP

在 Ubuntu 18.04 下提供 DHCP

问题摘要

我的机器上有两个网络接口,需要它们按以下方式运行:

  • enp3s0:机器的主网络接口。通过 DHCP 接收 IP 地址(将为 172.16.0.0/24)、网关和 DNS 解析器,用于办公室网络和整个世界。默认路由是到此接收的网关。

  • enp2s0:本地子网仅由距离超过 2 米的物体组成,并且没有任何物体可以访问主网络。 服务此网络(192.168.0.0/24,域为.localnet)上的 DHCP,并为本地机器提供.localnet客户端的 DNS 解析。

我在 16.04 下有一个解决所有这些问题的解决方案,使用/etc/network/域名系统(没有 NetworkManager),但我只是迷失在新时代的网络计划systemd-已解决.一切事物都不断地相互斗争。

那么,我正确的、现代的解决方案是什么,才能让它正常工作呢?理想情况下,我不需要为 20.04 进行更改。

附加信息

作为参考,这是我在 16.04 下完成我需要的操作的脚本。

#!/bin/bash
#
# Configure the PC to use dual network adapters.
#
# usage: dualnetwork.sh <hinetif> <localnetif>
#
# This configuration is based around the use of the classic ifupdown
# configuration files rather than NetworkManager.  This is substantially
# more stable and easier to work with.  It is probably prudent to also
# uninstall NetworkManager once this is done:
#   sudo apt-get remove network-manager
#
# Must run as root.
#
# Rob Gaddi, 29 Jan 2019

GENERATED="Generated by $0 at $(date)"
HINET=$1
LOCALNET=$2

abort () {
    echo $*
    exit 1
}

[[ ! -z "$LOCALNET" ]] || abort Must provide hinet and localnet interfaces.
ip -br addr | grep $HINET    || abort Interface $HINET not found
ip -br addr | grep $LOCALNET || abort Interface $LOCALNET not found

####################################################################
echo Configuring network interfaces
####################################################################
mkdir -p /etc/network/interfaces.d
echo source-directory /etc/network/interfaces.d > /etc/network/interfaces
cat <<-CONF > /etc/network/interfaces.d/hinet
    # $GENERATED
    auto $HINET
    iface $HINET inet dhcp
CONF
cat <<-CONF > /etc/network/interfaces.d/localnet 
    # $GENERATED
    allow-hotplug $LOCALNET
    iface $LOCALNET inet static
        address 192.168.0.20/24

    iface $LOCALNET inet static
        address 192.168.254.20/24
CONF

####################################################################
echo Installing and configuring dnsmasq
####################################################################
apt-get install --reinstall -y dnsmasq
mkdir -p /etc/dnsmasq.d
cat <<-CONF > /etc/dnsmasq.d/dualnetwork.conf
    # $GENERATED
    no-negcache
    dhcp-range=192.168.0.100,192.168.0.150,4h
    interface=$LOCALNET
    domain=localnet
    dhcp-fqdn
    log-dhcp
CONF
systemctl enable --now dnsmasq.service

编辑

这与将 /etc/network/interfaces 转换为 netplan 以获得浮动 IP问题不在于对机器 IP 地址进行网络规划;这部分相当简单。问题在于让系统在一个网络上提供 DHCP。当我以显而易见的方式尝试时,域名系统systemd-已解决一直踩着对方的脚趾。当我试图禁用systemd-resolvd并让域名系统完成所有工作时它从未得到上游 DNS 服务器当它接受主网络 DHCP。

答案1

根据systemd-resolved.service(8),有两种可能的方法来配置 systemd-resolved 来了解您的 dnsmasq 服务器:

  • 将其添加/etc/systemd/resolved.conf为“全局” DNS 服务器
  • 将其添加到*.networksystemd-networkd 读取的目录之一中的文件中。

对于后者,nameservers在您的 netplan 配置中设置一个选项可能就足够了enp2s0,指向 dnsmasq 将在其上运行的本地 IP。

相关内容