为什么linux ip命令在添加IPv4地址时不接受主机名

问题描述 投票:-1回答:1

我在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 Management10 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。有没有更好的办法?

linux networking routing ip
1个回答
-1
投票

没有错。路由基于IP地址,不能与DNS地址一起使用。想象一下,主机地址解析为应该以不同方式路由的多个IP地址。

在查看OSI层时,DNS名称位于顶部,而IP地址位于网络层中。你不能扭转它。

© www.soinside.com 2019 - 2024. All rights reserved.