为什么linux ip命令在添加IPv4地址时不接受主机名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么linux ip命令在添加IPv4地址时不接受主机名相关的知识,希望对你有一定的参考价值。
我在Ubuntu 17.04上玩ip
命令。 ip route add
命令不接受主机名。它将接受等效的IPv4地址。我究竟做错了什么?
$ sudo ip route add f3.com via 192.168.0.1
[sudo] password for jeffs:
Error: inet prefix is expected rather than "f3.com".
$ host f3.com
f3.com has address 174.132.98.146
$
$ sudo ip route add 174.132.98.146 via 192.168.0.1
$ sudo ip route list
default via 192.168.0.1 dev eno1 proto static metric 100
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 linkdown
169.254.0.0/16 dev eno1 scope link metric 1000
174.132.98.146 via 192.168.0.1 dev eno1
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.16 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
$ sudo ip route get f3.com
Error: inet prefix is expected rather than "f3.com".
$ sudo ip route get 174.132.98.146
174.132.98.146 via 192.168.0.1 dev eno1 src 192.168.0.16
cache
$ sudo ip -s route get 174.132.98.146
174.132.98.146 via 192.168.0.1 dev eno1 src 192.168.0.16
cache users 1
$
我看了Guide to IP Layer Network Administration with Linux, Appendix D. IP Route Management,10 Useful “IP” Commands to Configure Network Interfaces和其他地方,我没有看到任何做我正在做的事情的例子。
现在,我可以解决这个问题(UNIX是一件很棒的事情):
$ sudo ip route add `host f3.com | fgrep address | cut -d ' ' -f 4` via 192.168.0.23
$ sudo ip route list
default via 192.168.0.1 dev eno1 proto static metric 100
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 linkdown
169.254.0.0/16 dev eno1 scope link metric 1000
174.132.98.146 via 192.168.0.23 dev eno1
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.16 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
$
但这是一个kludge。有没有更好的办法?
答案
没有错。路由基于IP地址,不能与DNS地址一起使用。想象一下,主机地址解析为应该以不同方式路由的多个IP地址。
在查看OSI层时,DNS名称位于顶部,而IP地址位于网络层中。你不能扭转它。
以上是关于为什么linux ip命令在添加IPv4地址时不接受主机名的主要内容,如果未能解决你的问题,请参考以下文章