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
    • 最新
    • 标签
主页 / unix / 问题 / 718928
Accepted
Jonathan Hartley
Jonathan Hartley
Asked: 2022-09-28 10:42:58 +0800 CST2022-09-28 10:42:58 +0800 CST 2022-09-28 10:42:58 +0800 CST

在重新启动后保留 resolvectl 更改

  • 772

我正在使用 LXC 容器,并将 CONTAINERNAME.lxd 解析为指定容器的 IP,使用:

sudo resolvectl dns lxdbr0 $bridge_ip
sudo resolvectl domain lxdbr0 '~lxd'

这很好用!但是这些更改不会在主机重新启动后持续存在。

(我已经将“我尝试过的事情”描述为这个问题的答案,它们取得了不同程度的成功。)

我在 Pop!_OS 22.04 上,它基于 Ubuntu 22.04。

我应该如何使这些 resolvectl 更改在重新启动后持续存在?

networking lxc
  • 4 4 个回答
  • 30 Views

4 个回答

  • Voted
  1. Best Answer
    Jonathan Hartley
    2022-09-28T12:54:39+08:002022-09-28T12:54:39+08:00

    LXD 文档描述了一个解决方案:

    把它放在 /etc/systemd/system/lxd-dns-lxdbr0.service 中:

    [Unit]
    Description=LXD per-link DNS configuration for lxdbr0
    BindsTo=sys-subsystem-net-devices-lxdbr0.device
    After=sys-subsystem-net-devices-lxdbr0.device
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/resolvectl dns lxdbr0 BRIDGEIP
    ExecStart=/usr/bin/resolvectl domain lxdbr0 '~lxd'
    ExecStopPost=/usr/bin/resolvectl revert lxdbr0
    RemainAfterExit=yes
    
    [Install]
    WantedBy=sys-subsystem-net-devices-lxdbr0.device
    

    (替换您自己的 BRIDGEIP,来自lxc network show lxdbr0 | grep ipv4.address)

    然后应用这些设置而无需使用以下命令重新启动:

    sudo systemctl daemon-reload
    sudo systemctl enable --now lxd-dns-lxdbr0
    
    • 1
  2. Jonathan Hartley
    2022-09-28T12:33:15+08:002022-09-28T12:33:15+08:00

    我已经破解了一个可怕的解决方法:创建了一个脚本lxc-ip,从lxc list. 使用示例:ping $(lxc-ip mycontainer).

    脚本如下所示:

    #!/usr/bin/env bash
    
    prog=$(basename $0)
    
    function usage {
        echo "Usage: $prog CONTAINER" >&2
        echo "Outputs IPv4 address of given CONTAINER." >&2
    }
    
    container=""
    
    while [[ $# -gt 0 ]]
    do
      case "$1" in
      -h|--help)
        usage
        exit 0
        ;;
      *)
        if [ -z "$container" ]; then
            container=$1
        else
            echo "$prog error: Not multiple CONTAINERs" >&2
            usage
            exit 1
        fi
        ;;
      esac
      shift
    done
    
    if [ -z "$container" ]; then
        echo "$prog error: Must pass a CONTAINER" >&2
        usage
        exit 1
    fi
    
    table=$(lxc list -c ns4 -f csv)
    line=$(echo "$table" | grep "$container")
    if [ -z "$line" ]; then
        echo "$prog error: Container '$container' not found. Existing containers are:" >&2
        lxc list -c n -f compact >&2
        exit 2
    fi
    
    if ! grep -qs RUNNING <<<"$line" ; then
        echo "$prog error: Container is not running: $line" >&2
        exit 3
    fi
    
    ipv4=$(echo "$line" | cut -d',' -f3 | cut -d' ' -f1)
    if [ -z "$ipv4" ]; then
        echo "$prog error: Container has no IPv4: $line" >&2
        exit 4
    fi
    
    echo "$ipv4"
    
    • 0
  3. Jonathan Hartley
    2022-09-28T12:52:13+08:002022-09-28T12:52:13+08:00

    如果有人可以改进或确认,一位同事报告说他已经使用某种机制解决了这个问题,该机制涉及以下文本/etc/systemd/network/lxd.network:

    [Match]
    Name=lxdbr0
    
    [Network]
    Address=BRIDGEIP/24
    DNS=BRIDGEIP
    Domains=lxd
    

    (替换您自己的 BRIDGEIP,来自lxc network show lxdbr0 | grep ipv4.address)

    (这可能还需要同时运行 systemd-networkd 和 NetworkManager)

    • 0
  4. Jonathan Hartley
    2022-09-29T07:10:01+08:002022-09-29T07:10:01+08:00

    我看到了一个类似的 askubuntu.com 问题,其中唯一的 (-1) 答案建议通过将其他 resolvectl 更改转换为 nmcli(网络管理器 CLI)调用来保留它们。这显然将信息存储在某个地方,用于在启动时填充“resolvectl”配置。

    如果我这样做,我想我可以看到我将如何转换我的第一个 resolvectl 调用,使用类似的东西:

    sudo nmcli connection modify lxdbr0 ipv4.dns $bridge_ip
    

    但我无法将我的第二个 resolvectl 调用(设置“domain=~lxd”)转换为 nmcli 命令。

    所以这种方法并不能解决问题。

    • 0

相关问题

  • 使用 LXC 2.x 将主机文件夹挂载到来宾,但它是只读的吗?

  • 无法在 Alpine Linux LXC 上启动 NFS 服务器

  • LXC 容器内部从零开始的 Linux

  • 无法识别arp命令或ip命令哪个MAC地址输出正确

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve