BOOTPROTO=none IPADDR0=172.25.X.10 PREFIX0=24 GATEWAY0=172.25.X.254 DEFROUTE=yes DNS1=172.25.254.254
Linux 网络
基本概念
本部分包括 Linux 网络基本概念。
NetworkManager
NetworkManager 是监控和管理网络设置的守护进程。除了该守护进程外,还有一个提供网络状态信息的 GNOME 通知区域小程序。命令行和图形工具与 NetworkManager 通信,并将配置文件保存在 /etc/sysconfig/network-scripts 目录中。对于 NetworkManager:
-
一个 device(设备) 是一个网络接口。
-
一个 connection(连接) 是一组用来配置
设备
的设置的集合。 -
对于任何一个
设备
,在同一时间只能有一个连接处于活动状态
。可能存在多个连接,以供不同设备使用或者以便为同一设备更改配置。 -
每个
连接
具有一个用于标识自身的名称或 ID。 -
连接的持久配置存储在 /etc/sysconfig/network-scripts/ifcfg-
name
中,其中name
是连接的名称。如果需要,可以手动编辑此文件。 -
nmcli 是一个实用小工具,可用于通过 shell 提示符来创建和编辑连接文件。
ifcfg 文件的一般配置属性
Note
|
/etc/sysconfig/network-scripts/ifcfg-<name> 文件可以用来配置网络设备和连接。 |
通常情况,编辑 /etc/sysconfig/network-scripts/ifcfg-<name> 文件,添加下表中一些常见配置:
静态 | 动态 | 通用 |
---|---|---|
BOOTPROTO=dhcp |
DEVICE=eth0 NAME=eth0 ONBOOT=yes UUID=f3e8dd32-3... USERCTL=yes |
一般配置文件修改完成后需要重新加载网络连接,具体通过:
# nmcli con reload
# nmcli con down "eth0"
# nmcli con up "eth0"
nmcli con mod nm-settings 与 ifcfg-* 指令的比较
nmcli con mod | ifcfg-* 文件 | 作用描述 |
---|---|---|
|
|
IPv4 以静态方式配置。 |
|
|
IPv4 以动态的方式分配地址,将从 DHCPv4 服务器中查找配置设置。如果还设置了静态地址,则在我们从 DHCPv4 中获取信息之前,将不会激活这些静态地址。 |
|
|
设置 IPv4 地址、网络前缀和默认网关。如果一个连接设置了多个地址,则 ifcfg-* 指令将以 1、2、3 等等结尾,而不是以 0 结尾。 |
|
|
修改 /etc/resolv.conf 以使用此 nameserver |
|
|
修改 /etc/resolv.conf 以在 search 指令中使用此域。 |
|
|
忽略来自 DHCP 服务器的 DNS 服务器信息 |
|
|
IPv6 地址以静态方式配置 |
|
|
将使用路由器播发中的 SLAAC 来配置网络设置。 |
|
|
将使用 DHCPv6(而不使用 SLAAC)来配置网络设置 |
|
|
设置静态 IPv4 地址、网络前缀和默认网关。如果为连接设置了多个地址,IPV6_SECONDARIES 将采用空格分隔的地址/前缀定义的双引号列表。 |
|
|
修改 /etc/resolv.conf 以使用此 nameserver。与 IPv4 完全相同 |
|
|
修改 /etc/resolv.conf 以在 search 指令中使用此域。与 IPv4 完全相同。 |
|
|
忽略来自 DHCP 服务器的 DNS 服务器信息。 |
|
|
在启动时自动激活此连接。 |
|
|
此连接的名称。 |
|
|
连接与具有此名称的网络接口绑定。 |
|
|
连接与具有此 MAC 地址的网络接口绑定。 |
域名解析配置文件
/etc/hosts 文件中定义着 IP 地址和域名的映射关系
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.66.192.101 master.example.com
当通过 /etc/hosts 不能够完成域名解析时 /etc/resolv.conf 用来完成域名解析。这个文件中定义了一系列域名服务器和search:
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
Note
|
/etc/resolv.conf 文件会在网络接口重起时自动重写,设置 PEERDNS=no 属性可以阻止被自动更新。nmcli con mod eth0 ipv4.ignore-auto-dns yes 可以用来设定这个属性
|
基本命令
命令 | 描述 |
---|---|
在此系统上持久设置主机名。 |
|
显示/管理当前网络接口地址配置。 |
|
显示/管理网络设备 |
|
显示/管理路由信息 |
|
显示所有网络接口的 NetworkManager 状态。 |
|
列出所有连接。 |
|
列出 name 连接的当前设置。 |
|
添加一个名为 name 的新连接。 |
|
修改 name 连接。 |
|
告知 NetworkManager 重新读取配置文件(在手动编辑配置文件之后使用)。 |
|
激活 name 连接。 |
|
在网络接口 dev 上停用并断开当前连接。 |
|
删除 name 连接及其配置文件。 |
ip addr
# ip addr
# ip addr show eth0
ip link
# ip -s link
# ip -s link show eth0
Note
|
ip 用来显示/管理路由、设备、地址、等。
|
ip route
# ip route
ping
# ping -c2 10.66.193.254
PING 10.66.193.254 (10.66.193.254) 56(84) bytes of data.
64 bytes from 10.66.193.254: icmp_seq=1 ttl=255 time=2.05 ms
64 bytes from 10.66.193.254: icmp_seq=2 ttl=255 time=6.90 ms
--- 10.66.193.254 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.059/4.482/6.906/2.424 ms
tracepath
# tracepath 10.66.193.254
1?: [LOCALHOST] pmtu 1500
1: 10.66.193.253 2.605ms reached
1: 10.66.193.253 2.263ms reached
Resume: pmtu 1500 hops 1 back 1
traceroute
$ traceroute redhat.com
traceroute to redhat.com (10.4.204.55), 30 hops max, 60 byte packets
1 10.66.193.253 (10.66.193.253) 1.009 ms 1.133 ms 1.524 ms
2 10.66.254.13 (10.66.254.13) 0.464 ms 0.455 ms 0.438 ms
3 10.4.57.254 (10.4.57.254) 239.447 ms 239.446 ms 239.425 ms
4 10.4.56.12 (10.4.56.12) 250.716 ms 250.678 ms 261.759 ms
5 unused (10.4.60.2) 253.584 ms 253.562 ms unused (10.4.60.6) 253.529 ms
6 unused (10.4.253.2) 274.428 ms network (10.4.253.0) 247.439 ms unused (10.4.253.6) 274.089 ms
7 10.4.255.154 (10.4.255.154) 241.891 ms 10.4.255.156 (10.4.255.156) 241.231 ms 240.579 ms
8 10.4.192.5 (10.4.192.5) 239.829 ms 239.946 ms 240.473 ms
9 redirect-redhat-com.vserver.prod.ext.phx2.redhat.com (10.4.204.55) 239.598 ms 240.883 ms 239.943 ms
Note
|
tracepath/traceroute 默认发送 UDP 包给远程地址。traceroute 可以指定发送包的类型,ICMP (-I),TCP(-T)。 |
ss
Note
|
ss 主要用来显示一些端口服务相关的信息。
|
# ss -tu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp ESTAB 0 0 10.66.193.160:49795 51.15.41.135:ntp
udp ESTAB 0 0 10.66.193.160:34809 59.46.44.253:ntp
udp ESTAB 0 0 2620:52:0:42c0:5054:ff:fee0:d006:47532 2600:3c01::f03c:91ff:fe93:b0d1:ntp
tcp ESTAB 0 0 10.66.193.160:ssh 10.66.192.147:36872
Note
|
NOTE: /etc/services 中保存着所有端口和服务对应的信息。
|
# ss -ltp
Option | 描述 |
---|---|
-n |
显示数字(端口号)而不是服务名 |
-t |
显示 TCP 连接 |
-u |
显示 UDP 连接 |
-l |
仅显示 LISTEN 状态的 Socket |
-a |
显示所有(listening 和 established) Socket |
-p |
显示使用 Socket 的进程信息 |
nmcli con
# nmcli connection show
NAME UUID TYPE DEVICE
eth0 0e612544-0d1e-4487-83d8-d4f054e929d8 802-3-ethernet eth0
virbr0 405c39c0-8b20-475e-a241-137f74982308 bridge virbr0
# nmcli connection show --active
NAME UUID TYPE DEVICE
eth0 0e612544-0d1e-4487-83d8-d4f054e929d8 802-3-ethernet eth0
virbr0 405c39c0-8b20-475e-a241-137f74982308 bridge virbr0
# nmcli connection show eth0
....
Note
|
nmcli 同来管理网络配置和设备。另外 etc/sysconfig/network-scripts 中保存着网络和设备相关的配置文件。
|
nmcli dev
# nmcli device status
DEVICE TYPE STATE CONNECTION
virbr0 bridge connected virbr0
eth0 ethernet connected eth0
lo loopback unmanaged --
virbr0-nic tun unmanaged --
# nmcli device show eth0
GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 52:54:00:E0:D0:06
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: eth0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 10.66.193.160/23
IP4.GATEWAY: 10.66.193.254
IP4.ROUTE[1]: dst = 10.72.17.5/32, nh = 10.66.193.254, mt = 100
IP4.DNS[1]: 10.72.17.5
IP4.DNS[2]: 10.68.5.26
IP4.DOMAIN[1]: pek.redhat.com
IP6.ADDRESS[1]: 2620:52:0:42c0:5054:ff:fee0:d006/64
IP6.ADDRESS[2]: fe80::5054:ff:fee0:d006/64
IP6.GATEWAY: fe80::e6d3:f1ff:fe9a:2cc3
IP6.ROUTE[1]: dst = 2620:52:0:42c0::/64, nh = ::, mt = 100
nmcli con add
# nmcli connection add con-name "conn-dynamic" type ethernet ifname eth0
Connection 'conn-dynamic' (eaf49242-0708-43f7-aa98-10e62c29dfb4) successfully added.
# nmcli connection add con-name "conn-static" ifname eth0 autoconnect no type ethernet ip4 10.66.192.100/24 gw4 10.66.193.254
Connection 'conn-static' (874025b6-7a32-4ab7-873e-255aad44f2b6) successfully added.
# nmcli connection up "conn-static"
# nmcli connection up "conn-dynamic"
nmcli con modify
# nmcli connection modify "conn-static" connection.autoconnect no
# nmcli connection modify "conn-static" ipv4.dns 10.68.5.26
# nmcli connection modify "conn-static" +ipv4.dns 8.8.8.
# nmcli connection modify "conn-static" ipv4.addresses 10.66.192.100/24
# nmcli connection modify "conn-static" +ipv4.addresses 10.10.10.10/16
hostname
$ hostname
ksoong.redhat.com
hostnamectl
$ hostnamectl set-hostname master.example.com
$ hostnamectl status
Static hostname: master.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: d8bed309f4294655bb32a6fae3d9b8e9
Boot ID: f6013904460948db93109440302364f8
Virtualization: kvm
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
# cat /etc/hostname
master.example.com
Note
|
老版本的 Linux, hostname 保存在 /etc/sysconfig/network 。
|
getent hosts
$ getent hosts master.example.com
192.168.122.101 master.example.com master
host
# host master.example.com
nc
The Netcat tool can be run through the command nc, and has two mandatory arguments, a host and a port.
$ nc -z -v redhat.com 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.4.204.55:80.
Ncat: 0 bytes sent, 0 bytes received in 0.25 seconds.