运维日记016 – RHEL6基础网络配置总结
Linux下的基础网络配置主要包含网卡IP地址、网卡别名、子网掩码、网关以及DNS等的配置,以使得Linux主机可以和网络上的其他主机互联互通。以下对相关内容做一总结。
网卡名称
Linux内核将其检测到的网卡自动命名为ethX(X为数字,0,1,2…)。Linux下一个网卡也可以有多个名称,这叫做别名(aliases)。比如eht0网卡的别名通常命名为eth0:1、eht0:2等,每个别名都会被当做一个独立的网卡对待。当需要为一个物理网卡绑定多个IP地址时候,就需要使用网卡别名来实现。
查看当前的网卡配置
- IP
通常用ifconfig或者ip命令查看当前网卡IP地址配置。如:
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:F1:3F:CA
inet addr:192.168.1.115 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fef1:3fca/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:79 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10369 (10.1 KiB) TX bytes:9375 (9.1 KiB)
而ip命令则更加强大灵活。首先它也可以查看当前的网卡配置信息:
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00: 00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:f1:3f:ca brd ff:ff:ff:ff:ff:ff
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:f1:3f:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.1.115/24 brd 192.168.1.255 scope global eth0
inet6 fe80::a00:27ff:fef1:3fca/64 scope link
valid_lft forever preferred_lft forever
这里首先用ip link命名查看了当前系统内的所有网卡(lo是本地回环网卡),然后用ip addr命令查看eth0的具体配置信息。这里的stat UP表示该网卡已启用,qlen 1000表示eth0是一个千兆网卡。
- Route
我们可用ip route命令查看当前路由:
# ip route
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.111
169.254.0.0/16 dev eth0 scope link metric 1002
default via 192.168.1.1 dev eth0
我们看到最后一行default via 192.168.1.1 dev eth0
,含义是eth0网卡使用默认路由是192.168.1.1。
也可用route命令查看路由表:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
- DNS
DNS配置信息保存在/etc/resolv.conf文件中。
# cat /etc/resolv.conf
search sailor.com
nameserver 192.168.1.1
其中search sailor.com
表示DNS后缀。
另外DNS可以分为默认的DNS和仅对某网卡生效的DNS。/etc/resolv.conf保存的是全局DNS,对所有网卡都有效。而网卡还可以设置仅仅对该网卡有效的DNS,例如:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.1.111
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV6INIT=no
USERCTL=no
DNS1=192.168.1.254
显然,192.168.1.254这个DNS仅仅当eth0激活时对eth0有效,它可以覆盖默认DNS。
- Hostname
Hostname即主机名,可用通过hostname命令查看:
# hostname
sailor-m.sailor.com
- 本地的名称解析
Linux主机应该确保可以将自身主机名解析为正确的IP地址,这是通过/etc/hosts文件实现的。
# cat /etc/hosts
192.168.1.111 sailor-m.sailor.com sailor-m
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
网络配置文件
传统UNIX的网络配置文件保存在/etc/sysconfig/network-scripts目录下,RHEL6也继承了这一传统。但是RHEL6还有另一套网络配置文件保存在/etc/sysconfig/networking目录下。如何两者配置不一致,系统优先采用前者的配置。如果手工配置网络,则需确保这两套配置体系的一致和同步,否则系统会产生紊乱。因此,推荐用户使用Redhat开发的网络配置工具system-config-network或者system-config-network-tui,可以自动同步两套配置文件,节省了不少工作量也避免了出错。
其中system-config-network-tui可以在字符终端界面下运行,而system-config-network则依赖XWidnows,推荐安装前者。
# yum install system-config-network-tui
启动system-config-network-tui,配置完成后,使用service network restart
,则网络配置生效。
另外,RHEL6提供了一个NetworkManager服务用于自动化的对网络进行配置。这个服务对于网络环境经常变化(如笔记本电脑)的情形提供了很大便利,但对于服务器应用,最好将该服务关闭,避免它自动对网络进行设置。
# service NetworkManager stop
# chkconfig NetworkManager off
网络配置基本流程
网络配置可依据以下流程对各项进行设置:
- IP Address
- Network mask
- Gateway
# need to have network restarted after modify 1, 2, 3 - DNS
- DNS suffix
# no need to restart network after modify 4, 5 - Hostname
# usually need to restart the machine after modify 6 - /etc/hosts (hostname must be resolved anytime)
# no need to restart the network after modify 7
其中,步骤1~3可以用system-config-network-tui工具进行设置,配置完成后需要重启网络服务以生效。当然也可以通过ip、ifconfig命令或者直接修改配置文件进行设置,但较复杂容易出错,不推荐。
对于步骤4、5即全局的DNS和DNS后缀,可以直接修改/etc/resolv.conf文件,修改完成后无需重启网络服务而立即生效。
对于步骤6即hostname,可以通过修改/etc/sysconfig/network文件实现。
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=wjm.rhel_sailor.com
GATEWAY=192.168.1.1
这个文件中的NETWORKING=yes
可以开启或者关闭整个系统的网络;HOSTNAME=wjm.rhel_sailor.com
设置了系统的主机名;GATEWAY=192.168.1.1
设置了系统的默认路由,而在/etc/sysconfig/network-scripts/ifcfg-ethX(X为数字)文件中配置的是针对该网卡的路由,它可以覆盖默认路由,如果ifcfg文件没有设置路由,则默认路由生效。修改了hostname之后,通常需要重启整个系统才能生效。
对于步骤7即/etc/hosts文件,这个文件实现了在本地对主机名称进行解析。当Linux主机需要进行主机名解析时,会先访问/etc/hosts文件,如果本地解析不成功,再查询DNS。可以将自身的主机名和一些经常需要解析的主机名放在/etc/hosts文件中,用以加快解析速度。这里给出一个/etc/hosts文件的例子:
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.100 linumu100.com linumu100
192.168.1.120 ftpserver ftp120
一般情况下hosts文件的每行尾一个主机,每行由三部分组成,每个部分由空格隔开。第一部分:网络IP地址;第二部分:主机名或域名;第三部分:主机名别名。
网卡别名
当需要为一块物理网卡绑定多个IP地址时,需要使用网卡别名(alias)。简单的方法可以手动配置ifcfg文件来实现。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.1.111
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV6INIT=no
USERCTL=no
DNS1=192.168.1.254
下面对这个配置文件的主要项进行解释。DEVICE="eth0"
表示设备名为eht0;BOOTPROTO="none"
表示是否启用DHCP,none表示不启用;ONBOOT="yes"
表示启动时激活该网卡;IPADDR、DNS1、GATEWAY几项分别设置该网卡的IP、DNS和网关;USERCTL=no
表示不允许非root用户控制该网卡。另外还可以有NM_CONTROLLED="yes"
表示该网卡受Network Manager服务的控制,实时生效而无需重启网络服务,这其实是很大的安全隐患,很容易造成网络中断,建议设置为no。
接下来演示如何设置网卡子卡(别名):
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth0:0
# vi ifcfg-eth0:0
首先将ifcfg-eth0文件复制一份命名为ifcfg-eth0:0,然后vi打开ifcfg-eht0:0文件,修改其中的设备名称和IP地址项:
# cat ifcfg-eth0:0
DEVICE="eth0:0"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.1.112
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV6INIT=no
USERCTL=no
DNS1=192.168.1.1
可以看到,设备名改为eht0:0(必须和文件命一致),IP地址改为192.168.1.112。重启网络即可生效。
# service network restart
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:f1:3f:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.1.111/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.112/24 brd 192.168.1.255 scope global secondary eth0:0
inet6 fe80::a00:27ff:fef1:3fca/64 scope link
valid_lft forever preferred_lft forever
这里可以看到eth0网卡已有了192.168.1.111/24和192.168.1.112/24两个IP地址。另外请记住,子卡必须使用静态IP。