网络路由和网络配置
route命令
- 路由管理命令
- 查看:route -n
- 添加:route add
- route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
- 目标:192.168.1.3 网关:172.16.0.1
- route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
- 目标:192.168.0.0 网关:172.16.0.1
- route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
- route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
- 默认路由,网关:172.16.0.1
- route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
- route add default gw 172.16.0.1
- 删除:route del
- route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
- 目标:192.168.1.3 网关:172.16.0.1
- route del -host 192.168.1.3
- 目标:192.168.0.0 网关:172.16.0.1
- route del -net 192.168.0.0 netmask 255.255.255.0
配置动态路由
- 通过守护进程获取动态路由
- 安装quagga包
- 支持多种路由协议:RIP、OSPF和BGP
- 命令vtysh配置
netstat命令
- 显示网络连接:
- netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
- -t: tcp协议相关
- -u: udp协议相关
- -w: raw socket相关
- -l: 处于监听状态
- -a: 所有状态
- -n: 以数字显示IP和端口
- -e:扩展格式
- -p: 显示相关进程及PID
- 常用组合:
- -tan, -uan, -tnl, -unl
- 显示路由表:
- netstat {--route|-r} [--numeric|-n]
- -r: 显示内核路由表
- -n: 数字格式
- netstat {--route|-r} [--numeric|-n]
- 显示接口统计数据:
- netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
- netstat -i
- netstat –I=IFACE
- ifconfig -s eth0
- netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
ip命令
配置Linux网络属性:ip命令
-
ip - show / manipulate routing, devices, policy routing and tunnels
- ip [ OPTIONS ] OBJECT { COMMAND | help }
- OBJECT := { link | addr | route }
- ip link - network device configuration
- set dev IFACE
- 可设置属性:
- up and down:激活或禁用指定接口
- ifup/ifdown
- show [dev IFACE]:指定接口
- [up]:仅显示处于激活状态的接口
- set dev IFACE
-
ip addr { add | del } IFADDR dev STRING
- [label LABEL]:添加地址时指明网卡别名
- [scope {global|link|host}]:指明作用域
- global: 全局可用
- link: 仅链接可用
- host: 本机可用
- [broadcast ADDRESS]:指明广播地址
- ip addr add 172.16.100.100/16 dev eth0 label eth0:0
- ip addr del 172.16.100.100/16 dev eth0 label eth0:0
-
ip address show - look at protocol addresses
- [dev DEVICE]
- [label PATTERN]
- [primary and secondary]
-
ip addr flush 使用格式同show
- ip addr flush dev eth0
-
ip route - routing table management
- 添加路由:ip route add
- ip route add TARGET via GW dev IFACE src SOURCE_IP
- TARGET:
- 主机路由:IP
- 网络路由:NETWORK/MASK
- ip route add 192.168.0.0/24 via 172.16.0.1
- ip route add 192.168.1.100 via 172.16.0.1
- 添加网关:ip route add default via GW dev IFACE
- ip route add default via 172.16.0.1
- TARGET:
- 删除路由:ip route del TARGET
- 显示路由:ip route show|list
- 清空路由表:ip route flush [dev IFACE] [via PREFIX]
- ip route flush dev eth0
ss命令
-
格式:ss [OPTION]... [FILTER]
-
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取
- socket信息
-
选项:
- -t: tcp协议相关
- -u: udp协议相关
- -w: 裸套接字相关
- -x:unix sock相关
- -l: listen状态的连接
- -a: 所有
- -n: 数字格式
- -p: 相关的程序及PID
- -e: 扩展的信息
- -m:内存用量
- -o:计时器信息
-
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
-
TCP的常见状态:
- tcp finite state machine:
- LISTEN: 监听
- ESTABLISHED:已建立的连接
- FIN_WAIT_1
- FIN_WAIT_2
- SYN_SENT
- SYN_RECV
- CLOSED
-
EXPRESSION:
- dport =
- sport =
- 示例:’( dport = :ssh or sport = :ssh )’
-
常用组合:
- -tan, -tanl, -tanlp, -uan
示例:
- ss -l 显示本地打开的所有端口
- ss -pl 显示每个进程具体打开的socket
- ss -t -a 显示所有tcp socket
- ss -u -a 显示所有的UDP Socekt
- ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的
- ssh连接
- ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
- ss -s 列出当前socket详细信息
网络配置文件
-
IP、MASK、GW、DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
-
路由相关的配置文件:
- /etc/sysconfig/network-scripts/route-IFACE
-
/etc/sysconfig/network-scripts/ifcfg-IFACE:
- 说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt
- DEVICE:此配置文件应用到的设备
- HWADDR:对应的设备的MAC地址
- BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
- NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
-
ONBOOT:在系统引导时是否激活此设备
-
TYPE:接口类型;常见有的Ethernet, Bridge
-
UUID:设备的惟一标识
-
IPADDR:指明IP地址
-
NETMASK:子网掩码
-
GATEWAY: 默认网关
-
DNS1:第一个DNS服务器指向
-
DNS2:第二个DNS服务器指向
-
USERCTL:普通用户是否可控制此设备
-
PEERDNS:如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
-
设备配置被保存在文本文件中
- /etc/sysconfig/network-scripts/ifcfg-
- 帮助文档列出完整选项列表:/usr/share/doc/initcripts-
- /sysconfig.txt
- /etc/sysconfig/network-scripts/ifcfg-
动态配置:
DEVICE=ethX
HWADDR=0:02:8A:A6:30:45
BOOTPROTO=dhcp
ONBOOT=yes
Type=Ethernet
静态配置:
DEVICE=ethX
HWADDR=0:02:8A:A6:30:45
IPADDR=192.168.0.123
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
ONBOOT=yes
Type=Etherne
主机名和本地解析器
- 配置当前主机的主机名:
- hostname [HOSTNAME]
- /etc/sysconfig/network
- HOSTNAME=
- 解析器执行正向和逆向查询
- /etc/hosts
- 本地主机名数据库和IP地址的映像
- 对小型独立网络有用
- 通常,在使用DNS前检查
- getent hosts 查看/etc/hosts 内容
dns名字解析
-
/etc/resolv.conf
- nameserver DNS_SERVER_IP1
- nameserver DNS_SERVER_IP2
- nameserver DNS_SERVER_IP3
- search magedu.com
-
/etc/nsswitch.conf
- 与/etc/hosts相比优先于DNS
-
正向解析:FQDN-->IP
- dig -t A FQDN
- host -t A FQDN
-
反向解析:IP-->FQDN
- dig -x IP
- host -t PTR IP
-
/etc/sysconfig/network-scripts/route-IFACE
- 注意:需service network restart生效
- 两种风格:
- TARGET via GW
- 如:10.0.0.0/8 via 172.16.0.1
- 每三行定义一条路由
- ADDRESS#=TARGET
- NETMASK#=mask
- GATEWAY#=GW
- TARGET via GW
网卡别名
- 对虚拟主机有用
- 将多个IP地址绑定到一个NIC上
- eth0:1 、eth0:2、eth0:3
- ifconfig命令:
- ifconfig eth0:0 192.168.1.100/24 up
- ifconfig eth0:0 down
- ip命令:
- ip addr add 172.16.1.1/16 dev eth0
- ip addr add 172.16.1.2/16 dev eth0 label eth0:0
- ip addr del 172.16.1.2/16 dev eth0 label eth0:0
- ip addr flush dev eth0 label eth0:0
设备别名
- 为每个设备别名生成独立的接口配置文件
- 关闭NetworkManager服务
- ifcfg-ethX:xxx
- 必须使用静态联网
- DEVICE=eth0:0
- IPADDR=10.10.10.10
- NETMASK=255.0.0.0
- ONPARENT=yes
- 注意:service network restart 生效
- 参考:/usr/share/doc/initscripts-*/sysconfig.txt
网络接口配置-bonding
Bonding:将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
Bonding工作模式
- 共7种模式:0-6 Mode
- Mode 0 (balance-rr): 轮询(Round-robin)策略,从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
- Mode 1 (active-backup): 活动-备份(主备)策略,只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
- Mode 3 (broadcast):广播策略,在所有的slave接口上传送所有的报文,提供容错能力
- active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和EtherChannel
Bonding配置
-
创建bonding设备的配置文件
-
/etc/sysconfig/network-scripts/ifcfg-bond0
- DEVICE=bond0
- BOOTPROTO=none
- BONDING_OPTS="miimon=100 mode=0"
-
/etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=none
- MASTER=bond0
- SLAVE=yes
- USERCTL=no
-
查看bond0状态:/proc/net/bonding/bond0
-
miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
-
删除bond0
- ifconfig bond0 down
- rmmod bonding
-
详细帮助:
- /usr/share/doc/kernel-doc- version/Documentation/networking/bonding.txt
- https://www.kernel.org/doc/Documentation/networking/bonding.txt
CentOS 7网络配置
- CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡
时,名称可能会发生变化 - CentOS 7使用基于硬件,设备拓扑和设置类型命名:
- 网卡命名机制
- systemd对网络设备的命名方式
- (a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,如:eno1
- (b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如:ens1
- (c) 如果硬件接口的物理位置信息可用,则根据此信息命名,如:enp2s0
- (d) 如果用户显式启动,也可根据MAC地址进行命名,如:enx2387a1dc56
- (e) 上述均不可用时,则使用传统命名机制
- 基于BIOS支持启用biosdevname软件
- 内置网卡:em1,em2
- pci卡:pYpX Y:slot ,X:port
- 名称组成格式
- en: Ethernet 有线局域网
- wl: wlan 无线局域网
- ww: wwan无线广域网
- 名称类型:
- o
: 集成设备的设备索引号 - s
: 扩展槽的索引号 - x
: 基于MAC地址的命名 - p
s : enp2s1
- o
- 网卡命名机制
使用传统命名方式:
- (1) 编辑/etc/default/grub配置文件
- GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
- 或:修改/boot/grub2/grub.cfg
- (2) 为grub2生成其配置文件
- grub2-mkconfig -o /etc/grub2.cfg
- (3) 重启系统
CentOS 7网络配置工具
- CentOS7主机名
- 配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
- 显示主机名信息
- hostname
- hostnamectl status
- 设置主机名
- hostnamectl set-hostname centos7.magedu.com
- 删除文件/etc/hostname,恢复主机名localhost.localdomain
- CentOS 7网络配置工具
- 图形工具:nm-connection-editor
- 字符配置tui工具:nmtui
- 命令行工具:nmcli
nmcli命令
- 地址配置工具:nmcli
- nmcli [ OPTIONS ] OBJECT { COMMAND | help }
- device - show and manage network interfaces
- nmcli device help
- connection - start, stop, and manage network connections
- nmcli connection help
- 修改IP地址等属性:
- nmcli connection modify IFACE [+|-]setting.property value
- setting.property:
- ipv4.addresses ipv4.gateway
- ipv4.dns1 ipv4.method manual | auto
- nmcli connection modify IFACE [+|-]setting.property value
- 修改配置文件执行生效:systemctl restart network
- nmcli con reload
- nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
使用nmcli配置网络
- NeworkManager是管理和监控网络设置的守护进程
- 设备即网络接口,连接是对网络接口的配置,一个网络接口可有多个连接配置,但同时只有一个连接配置生效
- 显示所有包括不活动连接
- nmcli con show
- 显示所有活动连接
- nmcli con show --active
- 显示网络连接配置
- nmcli con show "System eth0“
- 显示设备状态
- nmcli dev status
- 显示网络接口属性
- nmcli dev show eth0
- 创建新连接default,IP自动通过dhcp获取
- nmcli con add con-name default type Ethernet ifname eth0
- 删除连接
- nmcli con del default
- 创建新连接static ,指定静态IP,不自动连接
- nmcti con add con-name static ifname eth0 autoconnect no type
- Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254
- 启用static连接配置
- nmcli con up static
- 启用default连接配置
- nmcli con up default
- 查看帮助
- nmcli con add help
举例:
- 修改连接设置
- nmcli con mod “static” connection.autoconnect no
- nmcli con mod “static” ipv4.dns 172.25.X.254
- nmcli con mod “static” +ipv4.dns 8.8.8.8
- nmcli con mod “static” -ipv4.dns 8.8.8.8
- nmcli con mod “static” ipv4.addresses “172.16.X.10/24 172.16.X.254”
- nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
- DNS设置,存放在/etc/resolv.conf文件中
- PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取 等价于下面命令:
- nmcli con mod “system eth0” ipv4.ignore-auto-dns yes
命令与文件的对照:
- 修改连接配置后,需要重新加载配置
- nmcli con reload
- nmcli con down “system eth0” 可被自动激活
- nmcli con up “system eth0”
- nmcli dev dis eth0 禁用网卡,访止被自动激活
- 图形工具
- nm-connection-editor
- 字符工具
- nmtui
- nmtui-connect
- nmtui-edit
- nmtui-hostname
nmcli实现bonding:
- 添加bonding接口
- nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
- 添加从属接口
- nmcli con add type bond-slave ifname ens7 master bond0
- nmcli con add type bond-slave ifname ens3 master bond0
- 注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
- 要启动绑定,则必须首先启动从属接口
- nmcli con up bond-slave-eth0
- nmcli con up bond-slave-eth1
- 启动绑定
- nmcli con up mybond0
网络组Network Teaming
-
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
-
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
-
网络组由内核驱动和teamd守护进程实现
-
多种方式runner
- broadcast
- roundrobin
- activebackup
- loadbalance
- lacp (implements the 802.3ad Link Aggregation Control Protocol)
-
启动网络组接口不会自动启动网络组中的port接口
-
启动网络组接口中的port接口总会自动启动网络组接口
-
禁用网络组接口会自动禁用网络组中的port接口
-
没有port接口的网络组接口可以启动静态IP连接
-
启用DHCP连接时,没有port接口的网络组会等待port接口的加入
创建网络组接口:
- nmcli con add type team con-name CNAME ifname INAME [config JSON]
- CNAME 连接名,INAME 接口名
- JSON 指定runner方式
- 格式:'{"runner": {"name": "METHOD"}}'
- METHOD 可以是broadcast, roundrobin,
- activebackup, loadbalance, lacp
创建port接口:
- nmcli con add type team-slave con-name CNAME ifname INAME master
- TEAM
- CNAME 连接名
- INAME 网络接口名
- TEAM 网络组接口名
- 连接名若不指定,默认为team-slave-IFACE
- nmcli dev dis INAME
- nmcli con up CNAME
- INAME 设备名 CNAME 网络组接口名或port接口
网络组示例:
- nmcli con add type team con-name myteam0 ifname team0 config '{"runner": {"name": "loadbalance"}}' ipv4.addresses 192.168.1.100/24 ipv4.method manual
- nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
- nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
- nmcli con up myteam0
- nmcli con up team0-eth1
- nmcli con up team0-eth2
- teamdctl team0 state
- nmcli dev dis eth1
管理网络组配置文件
- /etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{"runner": {"name": "broadcast"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONBOOT=yes
- /etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes
删除网络组:
- nmcli connection down team0
- teamdctl team0 state
- nmcli connection show
- nmcli connectioni delete team0-eth0
- nmcli connectioni delete team0-eth1
- nmcli connection show
网桥
- 桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
- 主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D
配置实现网桥:
- 创建软件网桥
- nmcli con add con-name mybr0 type bridge ifname br0
- nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
- nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0
- 查看配置文件
- cat /etc/sysconfig/network-scripts/ifcfg-br0
- cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
- 工具包 yum install bridge-utils
- 查看网桥 brctl show
- 查看CAM表 brctl showmacs br0
- 添加和删除网桥 brctl addbr | delbr br0
- 添加和删除网桥中网卡 brctl addif | delif br0 eth0
- 注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
测试网络工具
- 在命令行下测试网络的连通性
- 显示主机名
- hostname
- 测试网络连通性
- ping
- 显示正确的路由表
- ip route
- 显示主机名
- 跟踪路由
- traceroute
- tracepath
- mtr
- 确定名称服务器使用
- nslookup
- host
- dig
Ubuntu的网络配置
-
网卡名称:
- 默认ubuntu的网卡名称和CentOS 7类似,如:ens33,ens38等
-
修改网卡名称为传统命名方式:
- 修改配置文件为下面形式
- vi /etc/default/grub
- GRUB_CMDLINE_LINUX="net.ifnames=0"
- 生效新的grub.cfg文件
- grub-mkconfig -o /boot/grub/grub.cfg
- reboot
- 修改配置文件为下面形式
-
官网文档:
-
配置自动获取IP
cat /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: yes
-
修改网卡配置文件后需执行命令生效:netplan apply
-
配置静态IP:
cat /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.6.10/24
- 10.10.10.10/24
gateway4: 192.168.6.1
nameservers:
search: [mydomain, otherdomain]
addresses: [223.5.5.5, 8.8.8.8, 1.1.1.1]
- 查看ip和gateway
ip addr
route -n - 查看DNS
ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
systemd-resolve --status
- 修改主机名
- hostnamectl set-hostname ubuntu1904