标签: iproute2

我应该停止使用 Ifconfig 吗?

对于挂载 Infiniband 卡的服务器,当我使用该ifconfig命令时,我收到以下警告:

Ifconfig uses the ioctl access method to get the full address 
information, which limits hardware addresses to 8 bytes.
Because Infiniband address has 20 bytes, only the first 8 bytes 
are displayed correctly.
Ifconfig is obsolete! For replacement check ip.
Run Code Online (Sandbox Code Playgroud)

我应该停止使用ifconfig吗?它是否已被弃用以支持该ip命令?还是会在近期更新?

注意:这个问题和答案是关于GNU/Linux 的“主要”发行版的。不应假定该信息适用于所有发行版,尤其不适用于其他操作系统。

networking linux ifconfig iproute2

185
推荐指数
4
解决办法
7万
查看次数

ifconfig 的弃用声明(在 linux 上)在哪里?

很多人都说该ifconfig命令已被弃用而赞成该命令ip(至少在 linux 上)。

这通常被用作论证,从转换ifconfigip(见的一些意见和答案,我应该用ifconfig退出?)。

我们在哪里可以找到关于此的声明(即在哪里声明ifconfig将来不支持)?

networking linux ifconfig iproute2

42
推荐指数
3
解决办法
1万
查看次数

为什么从接口中删除未使用的 IP 地址会终止与该地址无关的连接

昨天,我在数据中心快速重新安装了一台(物理)服务器,由于时间紧迫,无法轻松访问我们的数据库,我只是为它分配了一个我知道可用的 IP,以便我以后访问分配正确的地址并从更温暖的地方继续配置。

今天我登录到服务器(在 172.16.130.10/22)并执行以下操作:

ip addr add 172.16.128.67/22 dev eth0
Run Code Online (Sandbox Code Playgroud)

从我本地工作站上的终端,我检查了它对新地址的 ping 响应并通过它登录:

$ ping 172.16.128.67
PING 172.16.128.67 (172.16.128.67) 56(84) bytes of data.
64 bytes from 172.16.128.67: icmp_req=2 ttl=62 time=3.61 ms
64 bytes from 172.16.128.67: icmp_req=3 ttl=62 time=4.87 ms
^C
$ ssh 172.16.128.67
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,我通过新的 IP 地址连接,旧的不再需要。我继续删除它:

ip addr del 172.16.130.10/22 dev eth0
Run Code Online (Sandbox Code Playgroud)

但是一旦我点击Enter我的 SSH 会话就冻结了,我无法再连接了。我不得不请求现场操作员为我重新启动服务器。

我哪里做错了?为什么删除该地址会终止我的连接?

networking linux iproute2

36
推荐指数
1
解决办法
2662
查看次数

路由选择:特异性与度量

我知道 Linux在进行路由选择时会选择到达目的地的最具体的路由。但是路由的度量呢?它的优先级是否比路由的特殊性更高?

参考 Linux 使用的路由选择算法的细节也将不胜感激。

linux routing route metrics iproute2

19
推荐指数
2
解决办法
5万
查看次数

ip route 显示 src 字段

我阅读了手册页,ip但仍然不明白是什么src,我找不到太多文档。

请,如果你能彻底解释它或指向一些链接,它是一个很好的答案。

linux routing iproute2

17
推荐指数
2
解决办法
3万
查看次数

列出所有路由表

我需要知道如何列出所有路由表的 ID。例如,我可以运行:

ip rule add fwmark 2 table 104
ip route add dev eth0 default via 192.168.3.7 table 104
Run Code Online (Sandbox Code Playgroud)

调用ip rule list显示:

0:  from all lookup local 
32765:  from all fwmark 0x2 lookup 104 
32766:  from all lookup main 
32767:  from all lookup default
Run Code Online (Sandbox Code Playgroud)

并调用ip route show table 104显示:

default via 192.168.3.7 dev eth0
Run Code Online (Sandbox Code Playgroud)

如果我然后调用ip rule del table 104,随后的调用ip rule list显示:

0:  from all lookup local 
32766:  from all lookup main 
32767: …
Run Code Online (Sandbox Code Playgroud)

routing iptables iproute2

17
推荐指数
3
解决办法
13万
查看次数

在 Linux 中如何显示 IPv6 NDISC 缓存?

假设您已经在其中一个 Linux 系统上配置了 IPv6 代理 NDP,如下所示:

ip -6 neighbor add proxy 2001:db8:1234::5 dev eth1
Run Code Online (Sandbox Code Playgroud)

您如何验证配置是否生效?ip -6 neighbor show似乎不显示代理条目,ip -6 neighbor show proxy也不是受支持的命令。

linux ipv6 iproute2 ndp

15
推荐指数
1
解决办法
6718
查看次数

Linux 上可以有多少个自定义路由表?

我一直在 Linux 上使用自定义路由表,我对“ip route”命令的一些文档和行为感到有些困惑。似乎唯一有效的值应该是 0-255 加上 /etc/iproute2/rt_tables 中定义的名称:

255 local
254 main
253 default
0   unspec
Run Code Online (Sandbox Code Playgroud)

这将为自定义表留下 1-252。尝试使用未定义的表名会出现错误:

$ ip route show table kermit
Error: argument "kermit" is wrong: table id value is invalid
Run Code Online (Sandbox Code Playgroud)

但是,似乎我可以使用远高于 255 的数字而不会出错:

$ ip route show table 1000
[no output]
$ ip route add 10.10.10.0/24 dev eth0 table 1000
[no output]
$ ip route show table 1000
10.10.10.0/24 dev eth0  scope link
Run Code Online (Sandbox Code Playgroud)

在某些时候,事情变得更加奇怪。在 maxint (2^31) 处,它“溢出”到本地表 (255):

$ ip route show table 2147483647
[no output] …
Run Code Online (Sandbox Code Playgroud)

linux route iproute2

12
推荐指数
1
解决办法
2万
查看次数

是否需要手动设置接口广播地址?

我正在从旧的网络工具转换我的脚本:

ifconfig eth0 192.168.2.1 netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

到iproute2:

ip link set eth0 up
ip addr add 192.168.2.1/24 dev eth0
Run Code Online (Sandbox Code Playgroud)

我注意到默认情况下新命令没有设置广播地址。

什么是:

1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 1c:6f:65:c5:d6:d7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global eth0
Run Code Online (Sandbox Code Playgroud)

就是现在:

1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 1c:6f:65:c5:d6:d7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 scope global eth0
Run Code Online (Sandbox Code Playgroud)

我可以将广播地址添加到ip addr命令中,但我想知道是否需要它?首先,这个广播地址是如何以及在哪里使用的?如果未设置,可能会破坏什么?其次,默认情况下,路由表看起来仍然具有正确的条目:

# ip route show table local dev eth0 scope link
broadcast 192.168.2.0  proto kernel  src 192.168.2.1 
broadcast …
Run Code Online (Sandbox Code Playgroud)

linux iproute2

12
推荐指数
2
解决办法
2万
查看次数

如何将接口移出网络命名空间?

如果我将一个接口临时移动到一个 netns 中

ip link set eth10 netns myns
Run Code Online (Sandbox Code Playgroud)

然后它不再在根目录中可见,仅在名称空间 myns 中可见。

我如何将其移回,例如(这些显然不存在):

ip link unset eth10
Run Code Online (Sandbox Code Playgroud)

也许

ip link set eth10 netns root
Run Code Online (Sandbox Code Playgroud)

或类似?

namespaces iproute2 network-namespace

11
推荐指数
3
解决办法
2万
查看次数