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 / 问题 / 460028
Accepted
rkjnsn
rkjnsn
Asked: 2018-08-03 00:48:33 +0800 CST2018-08-03 00:48:33 +0800 CST 2018-08-03 00:48:33 +0800 CST

自动将物理网络接口移动到命名空间

  • 772

我希望我系统上的所有物理接口都存在于称为“物理”的特定网络命名空间中。ip link set enp2s0 netns physical使用和之类的命令手动移动设备很容易iw phy phy0 set netns name physical,但我希望这在启动时和运行时连接的任何设备上都自动发生。

似乎实现这一点的最佳方法是通过 udev 规则,或者可能是一些 systemd 魔法。

我的第一个想法只是编写一个运行适当命令的 udev 规则,但我遇到了几个我无法通过搜索回答的问题:

  1. 如何区分物理接口和虚拟接口?
  2. 如何区分 WLAN 接口以便发出iw命令而不是ip命令?
  3. 如何获取 WLAN phy 的名称以便将其传递给iw命令?

我希望上述内容相对简单,但我在udevadm info.

networking systemd
  • 2 2 个回答
  • 2832 Views

2 个回答

  • Voted
  1. rkjnsn
    2018-08-05T22:43:20+08:002018-08-05T22:43:20+08:00

    根据 AB 的回答,我想出了以下规则:

    SUBSYSTEM=="net", ACTION=="add", DEVPATH!="/devices/virtual/*", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
    

    DEVPATH!="/devices/virtual/*是只抓物理设备的关键。[email protected]是将接口移动到所需命名空间 ( physical) 的一次性服务:

    [Unit]
    Description=Move interface to physical namespace
    [email protected]
    [email protected]
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/sbin/move-netif %I physical
    

    ([email protected]只需创建给定名称的网络命名空间。)

    最后,move-netif负责弄清楚如何移动界面:

    #!/bin/bash
    
    devpath="$1"
    target_ns="$2"
    
    if [[ -e "$devpath/phy80211" ]]; then
      phy="$(basename "$(readlink "$devpath/phy80211")")"
      iw phy "$phy" set netns name "$target_ns"
    else
      ifname="$(basename "$devpath")"
      ip link set "$ifname" netns "$target_ns"
    fi
    
    • 5
  2. Best Answer
    A.B
    2018-08-03T13:12:26+08:002018-08-03T13:12:26+08:00

    这些信息中的大部分都可以从以下位置检索/sys:

    1a。/sys/class/net/:网络设备列表,包括所有类型

    1b。/sys/devices/virtual/net/:虚拟网络设备列表:包括lo,隧道,veth,网桥......所以如果它在前者但不是这个,它应该是物理的。

    1. 如果设备是现代无线设备(驱动程序),它将具有条目/sys/class/net/<device>/phy82011/name,例如:

      $ grep -s --with-filename ''  /sys/class/net/*/phy80211/name
      /sys/class/net/wlan0/phy80211/name:phy0
      /sys/class/net/wlan1/phy80211/name:phy1
      /sys/class/net/wlan2/phy80211/name:phy2
      

    因此,通过从环境中运行适当的脚本udev并与来自 的那些目录和文件进行比较/sys,您应该拥有执行此操作所需的所有信息。

    顺便说一句,如果以后要在这些设备上工作,您只需更改网络命名空间(例如using nsenter --net=/var/run/netns/physical),/sys仍将位于主机的挂载命名空间中,并且不会反映这些设备的到来,而是会显示它们失踪。使用ip netns exec physical command很好,它确实会更改挂载命名空间并/sys为您重新挂载。

    • 3

相关问题

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

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

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

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

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

Sidebar

Stats

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

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

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

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

    • 5 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • 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
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +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