Linux:网络指令(route)
学习自:route命令 - Linux命令大全 | linux教程
1、说明
route命令用于显示、设置Linux网络路由表,route命令设置的主要是静态路由。
要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
Linux系统种设置路由通常是为了解决这个问题:该linux系统在一个局域网中,局域网中有一个网关,能够让主机访问互联网,那么就要将该机器的IP设为Linux机器的默认路由。
要注意,直接通过命令行的方式添加路由,只是临时的,重启后失效,如果要永久生效,需要去/etc/rc.local下添加route命令。
2、用法
用法:route 选项
选项:
选项 |
说明 |
-A | 设置地址类型(默认IPv4) |
-C | 打印Linux核心的路由缓存 |
-v | 详细信息模式 |
-n |
不进行DNS解析(不显示域名,例如default,gateway) 直接显示数字形式的ip地址 |
-e | 以netstat的格式显示路由表 |
-net IP地址 | 到某个网络的路由表 |
-host IP地址 | 到某个主机的路由表 |
add (后跟-net或-host) | 增加指定路由记录(临时) |
del(后跟-net或-host) | 删除指定路由记录(永久) |
Target | 目标主机或目标网络 |
gw 网关IP | 设置默认网关 |
mss | 设置TCP的最大区块长度(MSS),单位MB |
window | 指定通过路由表的TCP连接的TCP窗口的大小 |
dev 网卡设备名 | 路由记录表示的网络接口 |
例子
1、显示当前路由
route
route -n不会进行DNS解析,比如上文的default和gateway都会代之以具体IP,速度更快
解释:
- Destination:目的主机/网络的IP
- Gateway:发送到的网关
- Flags:路由标志,代表当前网络结点状态:
- U:UP,该路由当前为启动状态
- H:Host,该路由为某个主机路由
- G:Gateway,该路由为某个默认路由
- D:Dynamically,该路由为动态写入
- R:Reinstate Route,使用动态路由重新初始化的路由
- M:Modified,该路由是路由守护程序或导向器动态修改
- !:该路由为关闭状态
- Iface:网卡名
2、添加一条路由:route add -net destIP netmask 网关地址 dev 网卡
route add -net 192.168.60.11 netmask 192.168.60.1 dev ens192
增加一条路由,到目的地址192.168.60.11,网关192.168.60.1,通过网卡ens192转发
3、删除一条路由:route del -net dest_IP netmask 网关 dev 网卡
route del -net 192.168.60.11 netmask 192.168.60.1 dev ens192
删除到192.168.60.11,网关192.168.60.1,通过网卡ens192进行转发的路由
4、添加删除默认网关
route add default gw 192.168.60.1 route del default gw 192.168.60.1
错误
1)netmask doesn't match route address
不能随意添加一个route,执行指令
route add -net 192.168.10.11 netmask 255.255.255.0 gw 192.168.10.1 dev enp0s8
时可能会报错netmask doesn't match route address,原因是-net 后跟网段,而非某个指定的IP。如果要指定IP,应该使用host。
2)SIOCADDRT: Network is unreachable
在解决了第一个问题之后,如果单纯把-net改为-host,会报错SIOCADDRT: Network is unreachable,这是因为在添加一个新的网段时,它的出口地址应该是当前ip路由表中的当前有的地址,否则会出现这个错误:SIOCADDRT: 没有那个进程。
以上两个问题的解决思路来源:route路由失败,为何?_格格巫 MMQ!!的博客-CSDN博客
Linux route_route: netmask doesn't match route address_格格巫 MMQ!!的博客-CSDN博客