Linux 网络配置常用命令及示例
1. 网络接口
1.1 配置 IP 地址
代码语言:javascript代码运行次数:0运行复制yum install net-tools
# 使用 ifconfigifconfig eth0 192.168.1.3 netmask 255.255.255.0
# 添加 ipv6 地址ifconfig eth1 add240e:981:f200::100/64
# 增加网卡别名ifconfig eth0:0192.168.1.10
# 使用 ip 命令添加/删除一个IPip addr add192.168.1.4/24 dev eth0ip addr del192.168.1.4/24 dev eth0
这样配置的IP
地址在重启机器后会丢失,所以一般应该把网络配置写入文件中。 如Ubuntu
可以将网卡配置写入/etc/network/interfaces
(Redhat
和CentOS
则需要写入 /etc/sysconfig/network-scripts/ifcfg-eth0
中):
auto lo iface lo inet loopback
auto eth0 iface eth0 inet static address 192.168.1.3 netmask 255.255.255.0 gateway 192.168.1.1
auto eth1 iface eth1 inet dhcp
修改网络接口配置文件后可执行命令 service network restart
使配置生效。
获取指定接口ip地址的命令 ifconfig eth0 | grep 'inet '| awk '{print $2}'
1.2 配置 VLAN
代码语言:javascript代码运行次数:0运行复制#要在 CentOS 7 / RHEL 7 / CentOS 8 / RHEL 8 系统中使用 VLAN 标记接口,必须加载内核模块 8021qlsmod | grep -i 8021q
# 安装并加载内核模块apt-get install vlanmodprobe 8021q
# oryum install -y vconfig
# 添加vlanvconfig add eth0 100ifconfig eth0.100192.168.100.2 netmask 255.255.255.0
# 删除vlanvconfig rem eth0.100
# 使用 ip 命令创建Vlanip link add link eth0 name eth0.5 type vlan id 5ip addr add192.168.1.200/24 brd 192.168.1.255 dev eth0.5ip link set dev eth0.5 up
# 删除vlan接口ip link set dev eth0.5 downip link delete eth0.5
#实例vconfig add bond1 1200ifconfig bond1.1200120.31.144.210/24ip a show bond1.1200
•Linux下如何配置Vlan[1]
•如何在 CentOS/RHEL 系统中使用带 VLAN 标记的以太网卡
1.3 配置 MAC 地址
代码语言:javascript代码运行次数:0运行复制ifconfig eth0 downifconfig eth0 hw ether 1e:b0:01:8c:eb:3fifconfig eth0 up
ifconfig eth1 downip link set dev eth1 address 52:54:00:a1:b2:c3ip link set dev eth1 up
ip link set link ens4f0 address 00:5e:82:1f:90:f0 ens4f0.1300 type macvlan
•multiple MAC addresses on one physical network interface (linux)[2]
1.4 配置网卡混杂模式
代码语言:javascript代码运行次数:0运行复制ifconfig eth0 promisc #设置网卡的混杂模式
ifconfig eth0 -promisc #取消网卡的混杂模式
cat /sys/class/net/eth0/flags
要判断一个网络接口是否处于混杂模式(Promiscuous Mode),我们需要检查这个标志值中是否设置了 IFF_PROMISC
标志。 在Linux系统中,IFF_PROMISC
通常对应于十六进制数值中的 0x100
。
# 替换 eth0 为你要查询的网络接口名称INTERFACE="eth0"
# 读取 flags 文件的内容FLAGS=$(cat /sys/class/net/${INTERFACE}/flags)
# 将 flags 转换为数字FLAGS_DEC=$(( $FLAGS ))
# 检查 IFF_PROMISC 标志位 (0x100) 是否被设置if(( FLAGS_DEC &0x100));then echo "${INTERFACE} is in promiscuous mode."else echo "${INTERFACE} is not in promiscuous mode."fi
1.5 查看网卡 PCI 信息
代码语言:javascript代码运行次数:0运行复制lspci | grep netlspci -v | grep Ethernet
lspci -s 81:00.0-vv | grep Lnk
1.6 Bond 接口
Bonding 的模式一共有7种
• BOND_MODE_ROUNDROBIN
0 (balance-rr模式)网卡的负载均衡模式• BOND_MODE_ACTIVEBACKUP
1 (active-backup模式)网卡的容错模式• BOND_MODE_XOR
2 (balance-xor模式)需要交换机支持 (通过源和目标mac做hash因子来做xor算法来选择链路,这样就使得到达特定对端的流量总是从同一个接口上发出。)• BOND_MODE_BROADCAST
3 (broadcast模式)• BOND_MODE_8023AD
4 (IEEE 802.3ad动态链路聚合模式)需要交换机支持• BOND_MODE_TLB
5 自适应传输负载均衡模式• BOND_MODE_ALB
6 网卡虚拟化方式 (接收负载均衡是通过ARP协商实现的)
lsmod | grep bond
nmcli con add type bond con-name bond2 ifname bond2 mode active-backup ipv4.method manual ipv4.addresses 192.168.20.100/24 ipv4.gateway 192.168.20.1 ipv4.dns 192.168.20.1
nmcli connection add type bond-slave ifname ens4f0 master bond2nmcli connection add type bond-slave ifname ens4f1 master bond2nmcli connection up bond-slave-ens4f0nmcli connection up bond-slave-ens4f1nmcli connection up bond2cat /proc/net/bonding/bond2
ifenslave -a
cat /proc/net/bonding/bond1grep -i mode /proc/net/bonding/bond1
cat /sys/class/net/bond0/bonding/mode
ip link show master bond1
ip link | grep bond0
• Linux多网卡绑定(bond)及网络组(team)[3]• 链路层的网卡聚合-基于Linux bonding[4]
1.7 配置邻居表
代码语言:javascript代码运行次数:0运行复制[root@vm1 ~]# ip -6 nei
240e:981:f200::3e7 dev eth1 lladdr de:ad:00:00:00:01 STALE
240e:981:f200:2::1 dev eth1 FAILED
fe80::dcad:ff:fe00:1 dev eth1 lladdr de:ad:00:00:00:01 router STALE
[root@vm1 ~]#
[root@vm1 ~]# ip -6 nei add240e:981:f200:2::1 dev eth1
RTNETLINK answers:File exists
[root@vm1 ~]# ip -6 nei del240e:981:f200:2::1 dev eth1
[root@vm1 ~]# ip -6 nei add240e:981:f200:2::1 dev eth1
RTNETLINK answers:Invalid argument
[root@vm1 ~]# ip -6 nei add240e:981:f200:2::1 dev eth1 lladdr de:ad:00:00:00:01
RTNETLINK answers:File exists
[root@vm1 ~]# ip -6 nei
240e:981:f200::3e7 dev eth1 lladdr de:ad:00:00:00:01 STALE
fe80::dcad:ff:fe00:1 dev eth1 lladdr de:ad:00:00:00:01 router STALE
[root@vm1 ~]#
[root@vm1 ~]# ip -6 nei add240e:981:f200:2::1 dev eth1 lladdr de:ad:00:00:00:01
RTNETLINK answers:File exists
[root@vm1 ~]# ip -6 nei del240e:981:f200:2::1 dev eth1
[root@vm1 ~]# ip -6 nei add240e:981:f200:2::1 dev eth1 lladdr de:ad:00:00:00:01
[root@vm1 ~]#
[root@vm1 ~]# ip -6 nei
240e:981:f200::3e7 dev eth1 lladdr de:ad:00:00:00:01 STALE
240e:981:f200:2::1 dev eth1 lladdr de:ad:00:00:00:01 PERMANENT
fe80::dcad:ff:fe00:1 dev eth1 lladdr de:ad:00:00:00:01 router STALE
[root@vm1 ~]#
对于 ipv4 则是 arp 表:
代码语言:javascript代码运行次数:0运行复制arp -n
arp -s 10.1.2.3 aa:bb:cc:11:22:33
arp -i eth1 -s 10.1.2.3 aa:bb:cc:11:22:33
arp -d 10.1.2.3
2. 路由
2.1 查询路由表
代码语言:javascript代码运行次数:0运行复制route -n
route -6-n #for ipv6
ip -6 route show
ip route list
netstat -nr
netstat -nr -6
ip route get192.168.0.2
route 命令的输出项说明
输出项 | 说明 |
---|---|
Destination | 目标网段或者主机 |
Gateway | 网关地址,* 表示目标是本主机所属的网络,不需要路由 |
Genmask | 网络掩码 |
Flags | 标记。一些可能的标记如下: |
U — 路由是活动的 | |
H — 目标是一个主机 | |
G — 路由指向网关 | |
R — 恢复动态路由产生的表项 | |
D — 由路由的后台程序动态地安装 | |
M — 由路由的后台程序修改 | |
! — 拒绝路由 | |
Metric | 路由距离,到达指定网络所需的中转数(linux 内核中没有使用) |
Ref | 路由项引用次数(linux 内核中没有使用) |
Use | 此路由项被路由软件查找的次数 |
Iface | 该路由表项对应的输出接口 |
2.2 配置路由
代码语言:javascript代码运行次数:0运行复制# 使用 route 命令添加默认路由
route adddefault gw 192.168.1.1
# 也可以使用 ip 命令
ip route adddefault via 192.168.1.1
ip ro adddefault via 11.0.102.254 dev eth0 metric 101
ip -6 route adddefault via fd51:192:168:1::1 dev enp0s4
# 删除默认路由
ip route deldefault via 192.168.1.1
ip route del0.0.0.0/0 dev eth1
# 添加/删除 网段路由
ip route add192.168.5.0/24 dev eth1
ip route del192.168.5.0/24
ip route add21.0.1.0/24 via 192.168.0.1
• CentOS 7版本配置永久路由并更改默认路由[5]
3. 统计数据
3.1 查看网口统计数据
代码语言:javascript代码运行次数:0运行复制netstat --interfaces=eth1
netstat -I=eth1
#all interfaces
netstat -i
cat /proc/net/dev | grep -e packets -e Receive-e vnet1
ifconfig eth0
watch -d -n1 netstat -s -u
ip -s link show dev eth0
ethtool -S ens4f0 | grep -v ': 0'| grep port
3.2 查看网卡实时流量速率
代码语言:javascript代码运行次数:0运行复制yum install sysstat
sar -n DEV 12
sar -n DEV --iface=ens3f0 15
sar -n DEV --iface=eth1,eth2 110
# rxpck/s 每秒接收的包的数量
# txpck/s 每秒发出的包的数量
# rxKB/s 每秒接收的数据量,单位KByte
cat /proc/net/dev
watch -n 1-d 'ifconfig eth4 | grep -E "packets|bytes"'
4. 网桥
代码语言:javascript代码运行次数:0运行复制yum install bridge-utils
brctl show [bridge]
brctl addbr bridge1
brctl addif bridge1 eth1
ip link show type bridge
#shows a list of learned MAC addresses for this bridge
brctl showmacs <bridge>
root@localhost:~# brctl showmacs virbr0
port no mac addr islocal? ageing timer
8 52:54:00:48:bb:ba no 16.39
6 52:54:00:51:a2:dd no 5.31 #mac 地址不属于本机某接口
5 52:54:00:6d:74:5b no 15.04
1 52:54:00:d1:63:a9 yes 0.00 #mac 地址属于本机某一/些接口
1 52:54:00:d1:63:a9 yes 0.00
7 52:54:00:e4:e0:d9 no 164.81
8 fe:54:00:48:bb:ba yes 0.00
8 fe:54:00:48:bb:ba yes 0.00
6 fe:54:00:51:a2:dd yes 0.00
6 fe:54:00:51:a2:dd yes 0.00
5 fe:54:00:6d:74:5b yes 0.00
5 fe:54:00:6d:74:5b yes 0.00
3 fe:54:00:75:90:08 yes 0.00
3 fe:54:00:75:90:08 yes 0.00
2 fe:54:00:ab:75:ea yes 0.00
2 fe:54:00:ab:75:ea yes 0.00
4 fe:54:00:b6:d4:d3 yes 0.00
4 fe:54:00:b6:d4:d3 yes 0.00
7 fe:54:00:e4:e0:d9 yes 0.00
7 fe:54:00:e4:e0:d9 yes 0.00
root@localhost:~#
# 禁止桥接到系统的流量经过iptables规则进行过滤或处理(减少性能损耗)
echo 0>/proc/sys/net/bridge/bridge-nf-call-iptables
5. 网络命名空间
Network Namespace 是 Linux 内核提供的功能,可以借助 IP 命令来完成各种操作。
Network Namespace 能够实现网络相关资源的分割及隔离。 运行在一个单独 Network Namespace 中的进程拥有它自己的网络设备、路由表、防火墙规则等。是实现网络虚拟化的重要功能,能创建多个隔离的网络空间,它们有独自的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。
代码语言:javascript代码运行次数:0运行复制man ip-netns
ip netns add net1
ip netns list
ip netns exec net1 ip a
ip netns exec net1 ip r
ip netns exec net1 ifup lo
ip netns exec net1 route -n
ip netns exec net1 tcpdump -i net1-if6 -ennlv
ip netns exec net1 netstat -antpl
6. 参考文档
• man ip[6]• ethtool promisc 网卡混杂模式[7]• How to bring bond0/eth0 interface UP[8]• Linux查看实时网卡流量的几种方式[9]• linux中查看网卡流量六种方法[10]• linux中的网络命名空间的使用[11]
链接
[1]
Linux下如何配置Vlan:
[2]
multiple MAC addresses on one physical network interface (linux):
[3]
Linux多网卡绑定(bond)及网络组(team):.html
[4]
链路层的网卡聚合-基于Linux bonding:
[5]
CentOS 7版本配置永久路由并更改默认路由:
[6]
man ip:
[7]
ethtool promisc 网卡混杂模式:
[8]
How to bring bond0/eth0 interface UP:
[9]
Linux查看实时网卡流量的几种方式:
[10]
linux中查看网卡流量六种方法:.html
[11]
linux中的网络命名空间的使用:
发布评论