Linux网络配置基础篇
一、如何实现linux网络通信?
1)指定IP/NETMASK可实现本地通信;
2)指定路由(网关)可实现跨网络通信;
3)指定DNS服务器地址可实现基于主机名的通信,
主DNS服务器地址(当前服务器不在线时,启用备用DNS服务器地址)
备用DNS服务器地址
第三备份DNS服务器地址
二、配置网络方式及网络接口命名
linux 网络属于内核的功能,
配置方式:
静态指定:使用命令直接指定或修改配置文件
动态分配:依赖于本地网络中有DHCP服务
网络接口命名方式:
传统命名:
以太网:ethX, [0,oo),例如eth0, eth1, ...
PPP网络:pppX, [0,...], 例如,ppp0, ppp1, ...
本地回环:lo
可预测命名方案(CentOS):
支持多种不同的命名机制:Fireware, 拓扑结构
1) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1, eno2, ...
2) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, ...
3) 如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, ...
4) 如果用户显式定义,也可根据MAC地址命名,例如enx122161ab2e10, ...
上述均不可用,则仍使用传统方式命名;
命名格式的组成:
en:ethernet
wl:wlan
ww:wwan
名称类型:
o<index>:集成设备的设备索引号;
s<slot>:扩展槽的索引号;
x<MAC>:基于MAC地址的命名;
p<bus>s<slot>:基于总线及槽的拓扑结构进行命名;
传输层协议:
tcp:面向连接的协议;通信开始之前,要建立一个虚链路;通信完成后还要拆除连接;
udp:无连接的协议;直接发送数据报文;
三、常用网络配置命令
1.ifcfg命令家族: ifconfig, route, netstat
1)ifconfig命令:接口及地址查看和管理
ifconfig -a:显示所有接口,包括inactive状态的接口;
ifconfig IFACE IP/MASK [up|down]:为指定接口配置ip,开启或关闭接口;
fconfig IFACE IP netmask NETMASK :为指定的接口配置ip,子网掩码。
options:开启或关闭混杂模式[-]promisc;
注意:立即送往内核中的TCP/IP协议栈,并生效,只对当前内核有效;
管理IPv6地址:
add addr/prefixlen
del addr/prefixlen
2)route命令:路由查看及管理
路由条目类型:
主机路由:目标地址为单个IP;
网络路由:目标地址为IP网络;
默认路由:目标为任意网络,0.0.0.0/0.0.0.0
查看:# route -n
加:
route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If]
示例:route add -net 10.0.0.0/8 gw 172.18.0.1 dev eth1
到达10.0.0.0网络经由172.18.0.1(下一跳)
route add default gw 192.168.0.1 到达任意网络需经由192.168.0.1
删除:
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
示例: route del -net 10.0.0.0/8 gw 192.168.0.1
3)netstat命令:
显示路由表:netstat -rn
-r:显示内核路由表
-n:数字格式
显示网络连接:
netstat [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
-t:TCP协议的相关连接,连接均有其状态;FSM(Finate State Machine);
-u:UDP相关的连接
-w:raw socket相关的连接
-l:处于监听状态的连接
-a:所有状态
-n:以数字格式显示IP和Port;
-e:扩展格式
-p:显示相关的进程及PID;
常用组合:
netstat-tan:查看tcp协议相关链接
netstat-uan:查看udp协议相关连接
netstat -tnl:查看处于监听状态的tcp协议相关连接
netstat-unl:查看处于监听状态的udp协议相关连接
netstat-tunlp:显示处于监听状态的tcp及udp协议相关连接的进程及PID
显示接口的统计数据:
所有接口:netstat -i
指定接口:netstat -I<IFace>
ifup/ifdown命令:启用或禁用网卡(需要有网卡配置文件)
注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置;
配置主机名:
hostname命令:
查看:hostname
配置:hostname HOSTNAME
当前系统有效,重启后无效;
hostnamectl命令(CentOS 7):
hostnamectl status:显示当前主机名信息;
hostnamectl set-hostname:设定主机名,永久有效;
配置文件:/etc/sysconfig/network(CentOS6)
HOSTNAME=<HOSTNAME>
注意:此方法的设置不会立即生效; 但以后会一直有效;
配置DNS服务器指向:
配置文件:/etc/resolv.conf
nameserver DNS_SERVER_IP
如何测试(host/nslookup/dig):
# dig -t A FQDN(不会检查hosts)
FQDN --> IP
# dig -x IP
IP --> FQDN
2.iproute家族:
ip命令:
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route | netns }
注意: OBJECT可简写,各OBJECT的子命令也可简写;i
1)ip link: network device configuration
ip link set - change device attributes,dev NAME (default):指明要管理的设备,dev关键字可省略;
up和down:开启或关闭接口
multicast on或multicast off:启用或禁用多播功能;
name NAME:重命名接口
mtu NUMBER:设置MTU的大小,默认为1500;
ip link show - display device attributes
ip link help - 显示简要使用帮助;
netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;
2)ip netns: -manage network namespaces.
ip netns list:列出所有的netns
ip netns add NAME:创建指定的netns
ip netns del NAME:删除指定的netns
ip netns exe NAME COMMAND:在指定的netns中运行命令
3)ip address - protocol address management.
ip addr add IFADDR dev IFACE
[label NAME]:为额外添加的地址指明接口别名;
[broadcast ADDRESS]:广播地址;会根据IP和NETMASK自动计算得到;
[scope SCOPE_VALUE]:
global:全局可用;
link:接口可用;
host:仅本机可用;
ip addr delete IFADDR dev IFACE
ip addr list [IFACE]:显示接口的
ip addr flush dev IFACE:清空指定接口配置
4)ip route:路由表管理命令
ip route add - add new route
ip route change - change route
ip route replace - change or add new one
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
示例:
# ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100
# ip route add default via
#ip route del TYPE PRIFIX
#ip route get TYPE PRIFIX
3.ss命令:
ss [options] [ FILTER ]
选项:
-t:TCP协议的相关连接
-u:UDP相关的连接
-w:raw socket相关的连接
-l:监听状态的连接
-a:所有状态的连接
-n:数字格式
-p:相关的程序及其PID
-e:扩展格式信息
-m:内存用量
-o:计时器信息
TCP的常见状态:
TCP FSM:
LISTEN:监听
ESTABLISEHD:已建立的连接
FIN_WAIT_1:
FIN_WAIT_2:
SYN_SENT:
SYN_RECV:
CLOSED:
EXPRESSION:
dport = 目标端口
sport = 源端口
示例:‘( dport = :22 or sport = :22 )‘
ss -tan state ESTABLISHED
四、配置文件:
IP/NETMASK/GW/DNS等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
IFACE:接口名称;
路由的相关配置文件:/etc/sysconfig/network-scripts/route-IFACE
配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通过大量参数来定义接口的属性;其可通过vim等文本编辑器直接修改,也可以使用专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)
ifcfg-IFACE配置文件,如下图
网络服务:
network
NetworkManager
管理网络服务:
CentOS 6: service SERVICE {start|stop|restart|status}
CentOS 7: systemctl {start|stop|restart|status} SERVICE[.service]
配置文件修改之后,如果要生效,需要重启网络服务;
CentOS 6:# service network restart
CentOS 7:# systemctl restart network.service
用到非默认网关路由:/etc/sysconfig/network-scripts/route-IFACE
支持两种配置方式,但不可混用;
(1) 每行一个路由条目:
TARGET via GW
(2) 每三行一个路由条目:
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXTHOP
给接口配置多个地址:
ip addr之外,ifconfig或配置文件都可以;
(1) ifconfig IFACE_LABEL IPADDR/NETMASK
IFACE_LABEL: eth0:0, eth0:1, ...
(2) 为别名添加配置文件;
DEVICE=IFACE_LABEL
BOOTPROTO:网上别名不支持动态获取地址;static, none
nmcli命令:
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }
connection - start, stop, and manage network connections
COMMAND := { show | up | down | add | edit | modify | delete | reload | load }
modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>
如何修改IP地址等属性:
# nmcli conn modify IFACE [+|-]setting.property value
ipv4.address
ipv4.gateway
ipv4.dns1
ipv4.method
manual