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 / 问题 / 408802
Accepted
ricardomenzer
ricardomenzer
Asked: 2017-12-05 11:42:15 +0800 CST2017-12-05 11:42:15 +0800 CST 2017-12-05 11:42:15 +0800 CST

如何确保 /etc/network/interfaces 会启动接口?

  • 772

我有一个基于 Debian 的无头盒子。它旨在通过其网络接口进行访问。网络是通过/etc/network/interfaces. 我正在尝试验证文件是否真的有效。我的想法是检查文件是否有任何错误,在这种情况下,回退到默认文件。

我的问题是关于问题的第一部分:检测interfaces文件中的错误。

我发现了很多关于使用ifup --no-act命令的问题,但我在实践中看到的是这种方法对于我的情况来说不够健壮。举个例子:

root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts  /etc/network/if-pre-up.d
ip addr add 1s23.123.123.123/255.255.255.192 broadcast +          dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 123.123.123.122  dev eth0
run-parts  /etc/network/if-up.d

请注意无效的 IP 地址集(第一个八位字节中的额外“s”)。该命令没有给出错误(无论如何我都可以看到),如果我以这种状态的文件重新启动机器,我将失去网络功能。一个有效的interfaces给我一个非常相似的结果(除了broadcast +部分):

root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts  /etc/network/if-pre-up.d
ip addr add 123.123.123.123/255.255.255.192 broadcast 123.123.123.127     dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 123.123.123.122  dev eth0
run-parts  /etc/network/if-up.d

这主要是我试图避免的问题。我的问题是如何检测/etc/network/interfaces文件中的无效配置?加号是否表示有错误?这是什么意思?解决这个问题的最佳方法是什么?

networking configuration
  • 2 2 个回答
  • 1909 Views

2 个回答

  • Voted
  1. Best Answer
    Murphy
    2017-12-07T04:54:22+08:002017-12-07T04:54:22+08:00

    简短回答:ifup --no-act使用网络配置调用以测试并检查返回码。

    长答案:我一直在为嵌入式设备做一些非常相似的事情;这是我为此目的创建的 init 脚本的相关部分,它在networking启动之前执行,因此可以确保系统具有有效的以太网设置。

    ETH0_CUSTOM=/var/myproject/etc/interfaces.eth0 
    result=1
    
    if [ -f "${ETH0_CUSTOM}" ]; then
        ifup -n -i "${ETH0_CUSTOM}" eth0
        if [ $? -eq 0 ]; then
            ln -sf "${ETH0_CUSTOM}" /etc/network/interfaces.eth0
            result=0
        else
            echo "Validating ${ETH0_CUSTOM} failed"
        fi
    fi
    
    if [ ${result} -ne 0 ]; then
        ln -sf /etc/network/interfaces.eth0.default /etc/network/interfaces.eth0
    fi
    

    在原始/etc/network/interfaces版本中,有效设置包含在

    source /etc/network/interfaces.eth0
    
    • 3
  2. ilkkachu
    2017-12-06T06:03:43+08:002017-12-06T06:03:43+08:00

    我想我在这里看到两个问题/方法:

    • 保护用户不犯错误;和
    • 有办法在将修改后的配置永久化之前对其进行测试

    对于第一个,通过一些智能工具进行所有配置,该工具比$EDITOR /etc/foobar. 在这种情况下,它可以检查 IP 地址是否有效,以及默认路由是否在同一个网络中等。该工具可以是一些脚本,或基于图形/Web 的管理界面(就像您在 OpenWRT 等上使用的那样) .)

    另一件事是让用户在网络配置生效后验证网络配置,就像许多系统让用户验证显示设置(分辨率等)并在用户什么都不做时回退到最后的工作配置一样。

    所以,像这样:

    • 将启动配置与新配置分开,只允许用户更改新配置(而不是启动配置!)。
    • 当用户想要应用新配置时,安排在 5 分钟左右 ( shutdown -r +5) 后重新启动,然后加载新配置。

    • 现在,让用户检查他们是否仍然可以访问系统(包括打开新的 SSH 会话)。

    • 如果可以,他们可以确认更改,取消重新启动并将新配置复制到启动配置。

    • 如果他们在修改生效后无法访问系统,他们无法验证更改,并且重新启动将让他们重新开始(前提是启动配置很好,应该是这样,因为系统之前开始使用它。)

    这个想法应该适用于网络接口配置、防火墙配置等的变化。但它确实要求配置是自包含的,这样你就不能在新配置只工作的情况下结束,因为以前有效的启动配置包含一些重要的规则)

    (当然,实际重新启动系统并不是绝对必要的,只需重置配置即可。)


    当然,这些都不能阻止 root 用户在腿上开枪,但至少你可以提供一些带有安全开关的工具。

    通过控制台/串行端口等进行备份访问仍然是最好的。


    在这种特殊情况下,如果您的用户习惯于编辑/etc/network/interfaces和运行ifup,则您必须教他们摆脱它,这可能很难。或者您可以更改系统,以便实际配置确实位于其他位置,这样他们就不会让旧习惯引起问题。

    • 1

相关问题

  • 在 SSH 上从匹配组中排除用户

  • 关于网络挂载文件的问题

  • IP地址可以以255结尾而不是广播IP地址吗?

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

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

Sidebar

Stats

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

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

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

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +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