iproute2(ip命令)
阅读数:268 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
iproute2用于替代net-tools,二者提供了类似的功能,但使用不同的命令和语法。
虽然 net-tools
命令集在过去被广泛使用,但现在推荐使用 iproute2
命令集中的 ip
命令,因为它提供了更多的功能和更灵活的配置选项。在现代的 Linux 发行版中,iproute2
命令集通常已经预装,并成为默认的网络管理工具。
1、iproute2命令集
iproute2
是一个功能强大的网络配置和管理工具集,其中的主要命令是 ip
。iproute2
提供了先进的网络功能和更灵活的配置选项,逐渐取代了 net-tools
。
2、net-tools命令集
net-tools
是早期常用的网络工具集,其中的主要命令包括 ifconfig
、route
和 netstat
。
- ifconfig 命令用于配置和显示网络接口的信息,包括接口状态、IP 地址、MAC 地址等。
$ ifconfig eth0
- route 命令用于配置和显示路由表信息,包括添加和删除路由。
$ route add default gw 192.168.0.1
- netstat 命令用于显示网络状态和统计信息,包括网络连接、监听端口、路由表等。
$ netstat -tuln
3、netplan
可以只装netplan,而不需要安装openvswitch-switch
apt-get install netplan.io
Netplan 是一个用于在 Ubuntu 和其他基于 Debian 的系统上配置网络的工具。它使用 YAML 文件来描述网络接口的配置,并将这些配置应用到系统中。Netplan 支持多种后端,包括 NetworkManager 和 systemd-networkd。
Netplan 可以用来配置 Open vSwitch 的接口和网络拓扑。通过 Netplan,你可以定义 OVS 的桥接、端口和其他网络配置,并将这些配置应用到系统中。
主要特点:
- 简单的 YAML 配置文件格式。
- 支持多种后端(如 NetworkManager 和 systemd-networkd)。
- 适用于静态 IP 配置、DHCP、VLAN、桥接和绑定等多种网络配置。
4、openvswitch-switch
在 Ubuntu 系统中,openvswitch-switch
是 Open vSwitch 的一个软件包,它实现了一个多层虚拟交换机,主要用于管理虚拟机网络流量。Open vSwitch 被设计用于大规模多租户托管环境中,如云计算和虚拟化基础设施。
(1)验证本机是否安装
dpkg -l | grep openvswitch-switch
如果未安装
sudo apt install openvswitch-switch
(2)启动
sudo systemctl start ovs-vswitchd.service
(3)如果启动失败
journalctl -xe | grep ovs
(4)重装
sudo apt purge openvswitch-switch
sudo apt install openvswitch-switch
二、ip命令
ip指令可以配置网络接口(link)、接口地址(address)、ARP(neighbour)、路由(route)、路由策略数据库(rule)、隧道(runnel)等
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS] ]
(1)OPTIONS
-V | 打印iproute2工具集的版本号 |
-s | 输出更多的信息 |
-4 | ipv4 |
-6 | ipv6 |
-0 | link协议 |
-o | 以单行的形式输出查询结果,原来的换行符用 "\" 替代。 |
(2)OBJECT
link | 物理或者逻辑网络接口 |
address | 网络设备的协议(IPv4和IPv6)地址 |
neighbour | ARP条目相关 |
route | 路由表条目 |
rule | 路由策略数据库规则 |
tunnel | IP隧道 |
(3)COMMAND
add、delete、show(list)
set可缩写:s
参数
指定要操作的网络接口 | dev NAME (default) |
改变接口的状态为UP或是DOWN | up / down |
改变网络接口的NOARP标志,决定接口能否发arp包 | arp on / arp off |
改变网络接口MULTICAST标志 | multicast on / multicast off |
修改网络接口DYNAMIC标志 | dynamic on / dynamic off |
修改网络接口名 | name NAME |
修改网络接口的发送队列长度 | txqueuelen NUMBER / txqlen NUMBER |
修改网络接口的MTU | mtu NUMBER |
修改网络接口的MAC地址 | address LLADDRESS |
修改广播地址 | broadcast LLADDRESS,brd LLADDRESS or peer LLADDRESS |
示例
ip link set br0 up
ip link set br0 name lan
ip link set br0 mtu 1500
ip link set br0 address 4E:0C:BC:44:4C:A2
show可改写:list,list, sh, ls,l
参数
显示指定网络接口,省略NAME,则显示所有接口 | dev NAME (default) |
显示所有在运行的网络接口 | up |
示例
ip link show dev br0
ip link show br0
ip link ls br0
ip link l br0
address可以缩写为addr或a
(1)ip address add (添加新的协议地址)注意这种方式配置的ip,重启后会失效
add可以缩写: a
参数
添加地址的接口 | dev NAME |
接口的地址 | local ADDRESS (default) |
用于pointtopoint接口,设置对端接口地址 | peer ADDRESS |
设置接口的广播地址 | broadcast ADDRESS |
示例
ip address add 192.168.100.5/24 dev lan
ip addr add 192.168.100.10/24 dev lan
ip a add 192.168.100.10/24 dev lan
永久配置IP
- 在/etc/netplan/目录下的yml文件
# Let NetworkManager manage all devices on this system
network: # 网络
version: 2 # 版本
renderer: NetworkManager # 渲染器
ethernets: # 以太网
ens33:
addresses: [192.168.142.129/24]
dhcp4: false
dhcp6: false
routes:
- to: default
via: 192.168.142.2 # 默认网关
nameservers: # 域名服务器
addresses: [8.8.8.8, 114.114.114.114]
如果不配置域名服务器,会无法访问外网
renderer: NetworkManager 可能会因为你是桌面版和无桌面版有所不一样,无桌面版应该是 networkd。
sudo netplan apply
如果报错
Permissions for /etc/netplan/01-network-manager-all.yaml are too open. Netplan configuration should NOT be accessible by others.
这是由于你开放权限太高导致的,这时,我们就需要通过chmod命令来修改当前文件的权限了。
chmod 0600 01-network-manager-all.yaml
修改ip后,ssh连接时,可能需要手动删除之前连接过的机器记录(ssh-keygen)。
配置多个网关
network:
version: 2
renderer: networkd
ethernets:
eth0:
match:
macaddress: 00:11:22:33:44:55
routes:
- to: 192.168.1.0/24
via: 192.168.0.1
table: 100
- to: 10.0.0.0/24
via: 10.0.0.1
table: 200
(2)ip address delete (删除地址)
delete可缩写:del,d
示例
ip address del 192.168.100.5/24 dev br0
ip addr del 192.168.100.5/24 dev br0
(3)ip address show (查看ip地址)
show可改写为:list, lst, sh, ls, l
参数
指定网络设备名称 | dev NAME (default |
列出指定scope的地址 | scope SCOPE_VAL |
列出指定指定前缀的地址 | to PREFIX |
示例
~ # ip addr show to 192.168.100.5
6: lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 192.168.100.5/32 scope global lan
valid_lft forever preferred_lft forever
inet 192.168.100.5/24 scope global secondary lan
valid_lft forever preferred_lft forever
(4)ip address flush(删除接口的ip地址)
flush缩写:f
示例
ip address flush dev br0
ip a flush dev br0
neighbour可缩写:neighbor, neigh, n
(1)ip neighbour add (添加新的arp条目)
add缩写: a
(2)ip neighbour change(修改存在的条目)
change缩写: chg
(3)ip neighbour replace (添加新的或修改一个存在的条目)
replace缩写repl
前三者的参数相同
指定ARP的IP地址,IPv4或IPv6地址 | to ADDRESS (default) |
指定ARP表绑定的接口 | dev NAME |
指定ARP的MAC地址 | lladdr LLADDRESS |
ARP条目的状态,NUD是"Neighbour Unreachability Detection",状态有以下几个: - permanent :添加的ARP表条目永久有效,除非手动操作移除 - noarp :此ARP条目是有效的,但是不会尝试去验证它。生存周期到了将会被移除 - reachable :可达性超时时间之前,ARP条目都有效 - stale :ARP条目有效,但是是可疑的。如果一个ARP条目本来就有效的,此选项不会改变条目的状态,地址也不会被改变 |
nud NUD_STATE |
示例
ip neighbour add 192.168.100.4 lladdr 42:a9:7f:86:22:5c dev lan
(4)ip neighbour delete (删除arp条目)
delete缩写: del, d
示例
ip neigh del 192.168.100.5 dev br0
(5)ip neighbour show(显示arp条目)
show改写:list, sh, ls
参数
显示以ADDRESS前缀的ARP表 | to ADDRESS (default) |
只显示网络接口NAME的ARP表 | dev NAME |
示例
ip neigh show
(6) ip neighbour flush(清空arp表)
flush缩写: f
示例
ip neighbour f dev br0
路由表定义了数据包的传输路径。每个路由表包含一系列路由条目,每个条目定义了如何将数据包从一个网络传输到别一个网络。
route缩写: ro, r
(1)ip route add (添加新的路由)
(2)ip route change (修改路由)
(3)ip route replace (修改已有路由或添加新路由)
三者参数:
路由的preference值 | metric NUMBER or preference NUMBER |
路由添加的路由表,可以是数字或字符串,字符串对应的数字参考/etc/iproute2/rt_tables | table TABLEID |
路由的网络接口 | dev NAME |
路由的下一跳地址 | via ADDRESS |
指定路由的原地址 | src ADDRESS |
示例
ip route add 10.0.0/24 via 192.168.10.10
ip route add default dev eth1 via 192.168.10.10
(4)ip route delete (删除路由)
delete缩写: del , d
示例
ip route del default
(5)ip route show (查看路由)
show可:list, sh, ls, l
示例
ip route show
ip route show table 400
路由策略定义了选择哪个路由表来决定数据包的传输路径。策略路由允许根据数据包的特定属性(如源地址、目的地址、TOS等)来选择不同的路由表。
rule可缩写: ru
(1)ip rule add (插入新rule)
add可缩写: a
(2)ip rule delete (删除rule)
delete可缩写: del, d
示例
[root@192 ~]# ip rule add from all table 400 fwmark 400 priority 400
[root@192 ~]# ip rule show
400: from all fwmark 0x190 lookup 400
假设你有两个网络接口 eth0
和 eth1
,分别连接到两个不同的网络。你希望来自 192.168.1.0/24
网络的数据包通过 eth0
传输,而来自 192.168.2.0/24
网络的数据包通过 eth1
传输。
配置两个路由表
# 路由表 100: 用于 eth0
ip route add 192.168.1.0/24 dev eth0 table 100
ip route add default via 192.168.1.1 dev eth0 table 100
# 路由表 200: 用于 eth1
ip route add 192.168.2.0/24 dev eth1 table 200
ip route add default via 192.168.2.1 dev eth1 table 200
配置策略路由规则
# 来自 192.168.1.0/24 的流量使用路由表 100
ip rule add from 192.168.1.0/24 table 100
# 来自 192.168.2.0/24 的流量使用路由表 200
ip rule add from 192.168.2.0/24 table 200
对应的yaml文件
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.2/24
routes:
- to: 0.0.0.0/0
via: 192.168.1.1
table: 100
- to: 192.168.1.0/24
via: 192.168.1.1
table: 100
routing-policy:
- from: 192.168.1.0/24
table: 100
eth1:
dhcp4: no
addresses:
- 192.168.2.2/24
routes:
- to: 0.0.0.0/0
via: 192.168.2.1
table: 200
- to: 192.168.2.0/24
via: 192.168.2.1
table: 200
routing-policy:
- from: 192.168.2.0/24
table: 200
tunnel缩写: tunl
(1)ip tunnel add (创建隧道)
add缩写: a
参数
选择隧道网络接口名 | name NAME (default) |
设置隧道模式,有ipip,sit,gre模式 | mode MODE |
设置隧道对端的地址 | remote ADDRESS |
设置隧道本地地址 | local ADDRESS |
绑定隧道到一个网络接口,隧道的包将会通过此接口路由出去 | dev NAME |
示例
ip tunl add cisco mode sit remote 10.0.0.10 local 10.0.0.1 ttl 32
(2)ip tunnel show (查看隧道)
show可: list, sh, ls, l
示例
ip tunl show
cisco: ipv6/ip remote 10.0.0.10 local 10.0.0.1 ttl 32 6rd-prefix 2002::/16