Linux中路由route和ip route
1、route 和 ip route 命令来源
查看一个命令属于哪个软件包
rpm -qf `which route`
net-tools-2.0-0.62.20160912git.el9.x86_64
rpm -qf `which ip`
iproute-6.2.0-6.el9_4.x86_64
2、ip route 命令帮助
ip route help
==========================================
Usage: ip route { list | flush } SELECTOR
ip route save SELECTOR
ip route restore
ip route showdump
ip route get [ ROUTE_GET_FLAGS ] ADDRESS
[ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
[ mark NUMBER ] [ vrf NAME ]
[ uid NUMBER ] [ ipproto PROTOCOL ]
[ sport NUMBER ] [ dport NUMBER ]
ip route { add | del | change | append | replace } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
[ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO ]
[ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
[ ttl-propagate { enabled | disabled } ]
INFO_SPEC := { NH | nhid ID } OPTIONS FLAGS [ nexthop NH ]...
NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ]
[ dev STRING ] [ weight NUMBER ] NHFLAGS
FAMILY := [ inet | inet6 | mpls | bridge | link ]
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ as [ to ] ADDRESS ]
[ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ]
[ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
[ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
[ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
[ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
[ pref PREF ] [ expires TIME ] [ fastopen_no_cookie BOOL ]
TYPE := { unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat }
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
PREF := [ low | medium | high ]
TIME := NUMBER[s|ms]
BOOL := [1|0]
FEATURES := ecn
ENCAPTYPE := [ mpls | ip | ip6 | seg6 | seg6local | rpl | ioam6 ]
ENCAPHDR := [ MPLSLABEL | SEG6HDR | SEG6LOCAL | IOAM6HDR ]
SEG6HDR := [ mode SEGMODE ] segs ADDR1,ADDRi,ADDRn [hmac HMACKEYID] [cleanup]
SEGMODE := [ encap | inline ]
SEG6LOCAL := action ACTION [ OPTIONS ] [ count ]
ACTION := { End | End.X | End.T | End.DX2 | End.DX6 | End.DX4 |
End.DT6 | End.DT4 | End.DT46 | End.B6 | End.B6.Encaps |
End.BM | End.S | End.AS | End.AM | End.BPF }
OPTIONS := OPTION [ OPTIONS ]
OPTION := { srh SEG6HDR | nh4 ADDR | nh6 ADDR | iif DEV | oif DEV |
table TABLEID | vrftable TABLEID | endpoint PROGNAME }
IOAM6HDR := trace prealloc type IOAM6_TRACE_TYPE ns IOAM6_NAMESPACE size IOAM6_TRACE_SIZE
ROUTE_GET_FLAGS := [ fibmatch ]
3、ip route 命令常用格式
3.1、查询路由信息
route
route -n
route -n -e
ip route list
ip route
3.2、增加路由信息
1. ip route语法:ip route add 目标网络地址/子网掩码 via 网关地址
例如,要将目标网络地址为192.168.2.0/24的数据包通过下一跳地址为192.168.0.1的网关进行转发,可以使用以下命令:
ip route add 192.168.2.0/24 via 192.168.0.1
2. 添加一条默认路由,下一跳网关地址为192.168.168.1。
ip route add default via 192.168.168.1 dev ens160 proto static metric 100
ip route add: 这是ip命令的一个子命令,用于添加网络路由。
default: 指定这是一个默认路由,即对于所有未明确指定的其他网络的目的地。
via 192.168.168.1: 指定网关IP地址。数据包将被发送到这个IP地址,然后由该设备进一步转发。
dev ens160: 指定数据包应该通过哪个网络接口发送。在这个例子中,数据包将通过名为ens160的网络接口发送。
proto static: 指定路由协议类型。这里的static表示这是一个静态路由,由管理员手动配置。
metric 100: 指定路由的优先级或成本。数值越小,优先级越高。这里的值为100,意味着如果存在其他具有较低metric值的默认路由,则它们将被优先使用。
3.3、删除路由信息
2、删除一个默认网关
2.1、route语法:route del -net 目标网络地址 netmask 子网掩码 gw 网关地址
例如,要删除目标网络地址为192.168.1.0/24的路由表项,可以使用以下命令:
route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
2.1、ip route语法:ip route del 目标网络地址/子网掩码 via 网关地址
例如,要删除目标网络地址为192.168.2.0/24的路由表项,可以使用以下命令:
ip route del 192.168.2.0/24 via 192.168.0.1
route del default gw 192.168.168.1
ip route del default via 192.168.168.1 dev ens160 proto static metric 100
IPV4的源地址路由配置:
1. 打开Linux路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
2.添加路由表,自定义的路由表应介于0到252。
ip route add 172.25.2.0/24 via 192.168.1.5 table 100
ip route add default via 192.168.1.5 table 100
172.25.2.0/24 表示发往的网段
default 默认路由
via表示192.168.1.5表示网关
3.关联一个规则到路由表
ip rule add from 192.168.1.2 table 100
from表示源IP为192.168.1.2的包,查询路由表100.
4.刷新路由缓存
ip route flush cache
netstat -nt
ss -nt
链路层
ip link
网络层
ip address
ip address add 2.2.2.2/24 dev eth2 label eth2:1
路由
ip route
其他 待整理
如果你要求在使用 macvlan 配置多个 IP 和 MAC 地址时,要求 ARP 响应的 MAC 地址与 IP 地址一一对应,可以考虑使用不同的 macvlan 接口来实现。
首先,创建多个 macvlan 接口,并为每个接口分配对应的 IP 地址和 MAC 地址。例如,创建两个接口 macvlan1
和 macvlan2
:
ip link add link eth0 macvlan1 type macvlan mode bridge
ip addr add 192.168.1.100/24 dev macvlan1
ip link set dev macvlan1 address 00:11:22:33:44:55
ip link add link eth0 macvlan2 type macvlan mode bridge
ip addr add 192.168.1.200/24 dev macvlan2
ip link set dev macvlan2 address 00:11:22:33:44:66
这里假设你的基础网络设备是 eth0
,你可以根据实际情况修改。
接下来,需要配置每个接口的 ARP 响应行为,使其与相应的 IP 地址一一对应。可以使用 ip
命令的 neigh
子命令来实现:
ip neigh add 192.168.1.100 dev macvlan1 lladdr 00:11:22:33:44:55 nud permanent
ip neigh add 192.168.1.200 dev macvlan2 lladdr 00:11:22:33:44:66 nud permanent
这样配置之后,当有 ARP 请求发送到相应的 IP 地址时,会使用对应的 MAC 地址进行响应。
需要注意的是,每个 macvlan 接口必须使用不同的 IP 地址和 MAC 地址,并且你需要根据实际需要配置相应的路由规则和防火墙策略来确保流量可以正确地转发。
希望这能帮助你解决问题!如果还有其他疑问,请随时提问。
3.1、route语法:route add -net 目标网络地址 netmask 子网掩码 gw 网关地址
例如,要将目标网络地址为192.168.1.0/24的数据包通过网关地址为192.168.0.1的网关进行转发,可以使用以下命令:
ip route add default via 192.168.168.1 dev ens160 proto static metric 100
3、添加一个默认网关
3.1、route语法:route add -net 目标网络地址 netmask 子网掩码 gw 网关地址
例如,要将目标网络地址为192.168.1.0/24的数据包通过网关地址为192.168.0.1的网关进行转发,可以使用以下命令:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
route add -net 192.168.10.0 netmask 255.255.255.0 dev ens160
去往192.168.10.0/24网段的路由通过ens160网卡出去
5、添加一个缺省路由
route add default gw 192.168.0.1