最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Linux 网络配置常用命令及示例

网站源码admin5浏览0评论

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(RedhatCentOS则需要写入 /etc/sysconfig/network-scripts/ifcfg-eth0中):

代码语言:javascript代码运行次数:0运行复制
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

代码语言:javascript代码运行次数:0运行复制
# 替换 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协商实现的)

代码语言:javascript代码运行次数:0运行复制
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中的网络命名空间的使用:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-05-01,如有侵权请联系 cloudcommunity@tencent 删除配置网络linux接口路由
发布评论

评论列表(0)

  1. 暂无评论