真不敢想象没有网络的一天 应该怎样度过,但是有了网络就行了?原来刚有了网络时由于没有统一的标准,各大硬件厂商各自为政,都在搞网络,但是都只是同一厂商的设备可以进行通讯,就 和不同的国家的人交流使用了不同的语言一样,难以将所有的网络连接起来,之后Internet有了统一的标准,大家都遵循它的标准,后来计算机才能进行网 络通讯,同样将linux主机接入网络也必须进行配置它的网络,及其相关的主机名等,下面将逐一进行配置:
1. 主机名:
rhel6中主机名修改
[root@cnode6_8 ~]# cat /etc/sysconfig/network //配置文件存放地方,只需按照格式修改配置文件即可,修改后可以永久修改 NETWORKING=yes HOSTNAME=cnode6_8.desktop [root@cnode6_8 ~]# hostname jack.desktop //当然也可以临时修改主机名 rhel7主机名修改:可以通过nmtui命令图形化设置主机名和网络设置 [root@centos7 ~]# hostnamectl set-hostname cnode1.localdomain //使用命令修改主机名,该命令修改主机名永久生效!当然也可以直接修改配置文件。 [root@centos7 ~]# cat /etc/hostname //查看确实已经生效 cnode1.localdomain2. ip/mask,路由,默认网关等使用过命令进行设置:
[root@cnode6_8 ~]# ifconfig eth2 192.168.66.130 netmask 255.255.255.0 broadcast 192.168.66.255 [root@cnode6_8 ~]# ifconfig | grep eth2 -A 1 eth2 Link encap:Ethernet HWaddr 00:0C:29:C8:95:18 inet addr:192.168.66.130 Bcast:192.168.66.255 Mask:255.255.255.0注:在rhel6和rhel7中都可使用上面的命令进行修改,rhel6和rhel7中都可以使用network、NetworkManager两个服务进行对网络管理,但是在rhel6当中建议使用network服务rhel6中NetworkManager服务可能不太稳定,许多环境下会关闭该服务,比如在双网卡绑定,网卡别名等情况下。在rhel7当中推荐使用后者。原因是如果两个服务同时存在有可能修改配置文件不起作用,建议使用一个服务,另一个停掉,这样不会引起冲突。
3. DNS服务设置:
(可以配置多个DNS服务器。主次第三DNS服务器)两个版本的系统均在配置文件中配置即可,当然也可以使用命令如nmcli等。DNS对应的配置文件是 /etc/resolv.conf ,如果在网卡的配置文件当中PEERDNS配置的选项如果为yes,并且IP地址是自动获取,则按网卡的配置文件自动生成该文件,DNS解析时会首先查找/etc/hosts文件,如果该文件没有响应的记录,则会查找/etc/resolv.conf文件,当然可以修改配置文件/etc/nsswitch.conf 找到#hosts开头的下一行将hosts后面的两个参数调换顺序即可改变两者的优先级。
4. 网络配置文件:
在/etc/sysconfig/network-scripts 目录下,存放网络启动相关的配置信息,静态指定的方式除了上面的临时指定,还有通过文本图形化设置,也非常方便:
[root@cnode6_8 network-scripts]# system-config-network //文本图形化配置命令网卡配置文件文件如下:
[root@cnode6_8 network-scripts]# cat ifcfg-eth0 DEVICE=eth0 //物理网卡名,必须指定 TYPE=Ethernet //类型以太网 ONBOOT=yes //默认开机启动 NM_CONTROLLED=yes //是否受到NetworkManager管辖,在rhel6中建议no BOOTPROTO=none // 地址分配方式,dhcp,none,static IPADDR=10.1.255.166 //ipv4地址 NETMASK=255.255.0.0 //子网掩码,使用PREFIX关键字指定也可以 USERCTL=no //普通用户是否能控制 IPV6INIT=no PREFIX=16 // 网络前缀,可以使用NETMASK替代 GATEWAY=10.1.255.166 //网关 DNS1=10.1.0.1 //DNS可以指定多个,不同的用数字区分如DNS1 DEFROUTE=yes PEERDNS=yes //如果地址分配方式为dhcp,是否允许将分配的dns服务器信息直接写入/etc/resolv.conf,本地解析文件在:/etc/hosts配置文件当中 IPV4_FAILURE_FATAL=yes NAME="System eth0" UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 HWADDR=00:0C:29:C8:95:0E MACADDR=66:66:66:66:66:66 //可以手动指定mac,在交换机看来就是MACADDR,通过wireshark抓包看到mac确实显示的是自己设定的二、网卡别名(rhel6中):可以将多个IP绑定到一个网卡上面网卡名字的DEVICE后面加冒号和相应的数字,可以自己定义,如eth0:1,在配置是注意在真实的物理网卡配置上可以配置dhcp,别名上面只能使用静态IP给主机添加IP,其他配置和一般的网卡配置一样,网卡别名可以用在如为多个vlan提供服务,因为多个vlan是属于不同的网络中,所以一台服务器可以为一块网卡配置多个ip,使它分属于不同的vlan。rhel7中可以在配置文件中使用索引的方式添加多个IP,也可以使用nmcli命令进行直接添加无需添加别名设置
[root@cnode6_8 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1 [root@cnode6_8 network-scripts]# vim ifcfg-eth0:1 [root@cnode6_8 network-scripts]# head -n1 ifcfg-eth0:1 DEVICE=eth0:1 [root@cnode6_8 network-scripts]# ifconfig eth0:2 192.168.1.66/24 up [root@cnode6_8 network-scripts]# ip a |grep 192 inet 192.168.1.66/24 brd 192.168.1.255 scope global eth0:2三、 ip命令使用:ip可以临时性管理ip地址,包括添加删除,添加别名:
ip addr add 172.16.1.2/16 dev eth0 ip addr add 172.16.1.1/16 dev eth0 label eth0:0 ip addr del 172.16.1.1/16 dev eth0 label eth0:0 ip addr flush dev eth0 label eth0:0示例:
[root@cnode6_8 network-scripts]# ip addr add 5.5.5.5/16 dev eth0 [root@cnode6_8 network-scripts]# ip a |grep 5.5.5 inet 5.5.5.5/16 scope global eth0 [root@cnode6_8 network-scripts]# ip a add 9.9.9.9/8 dev eth0 label eth0:0 [root@cnode6_8 network-scripts]# ip a |grep 9.9 inet 9.9.9.9/8 scope global eth0:0 [root@cnode6_8 network-scripts]# ip a flush dev eth0 label eth0:0 [root@cnode6_8 network-scripts]# ip a |grep 9.9 [root@cnode6_8 network-scripts]# [root@centos7 ~]# ip a a 10.1.255.156/32 brd 10.1.255.155 dev eno33554984:0 [root@centos7 ~]# ip a show eno33554984 4: eno33554984: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:db:2d:c5 brd ff:ff:ff:ff:ff:ff inet 10.1.255.177/16 brd 10.1.255.155 scope global eno33554984 valid_lft forever preferred_lft forever inet 10.1.255.155/32 brd 10.1.255.155 scope global eno33554984 valid_lft forever preferred_lft forever inet 10.1.255.156/32 brd 10.1.255.155 scope global eno33554984 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fedb:2dc5/64 scope link valid_lft forever preferred_lft forever四、 nmcli命令的使用
nmcli是一个控制和管理NetworkManager服务的命令行工具,nmcli可以实现报告网络状态,修改,删除编辑创建等操作,在NetworkManager管理思想中,网络设备是关联一个链接名的,通过链接的配置信息绑定至网卡等设备上,使得设备生效下面是它的使用方法和具体案例:
nmcli dev status :列出所有设备
nmcli dev dis <DEV> 关闭硬件接口
nmcli con show :列出所有连接
nmcli con up <ID>:激活ID连接
nmcli con down <ID> 取消激活
nmcli dev dis <DEV> 中断物理接口,并且暂时禁用自动连接
nmcli net off :禁用所有管理的接口
nmcli con add … :添加新连接
nmcli con mod <ID> 修改连接
nmcli con del <ID> 删除连接
nmcli con reload 重新加载配置
nm-connection-editor 图形化管理工具
nmtui 文本字符的图形化管理工具
注:此处的ID即为nmcli创建的链接名
示例:
Wired connection 2 4d90f23b-614e-476c-9e9d-5e2e24ab04e2 802-3-ethernet -- team0 3862c422-c585-47af-8c76-10c22fd90d2c team team0 virbr0 21a2bcd5-ff7f-4966-b21d-5eeef7cb3ac4 bridge virbr0 eno16777736 9cff9661-c26d-430e-bc78-59ae0a6d2e2d 802-3-ethernet eno16777736 eno16777736 b508c047-1437-4063-ba18-153985c4733b 802-3-ethernet -- Wired connection 1 38a1b9c7-d6d0-40d4-b47e-52ad2a5e1426 802-3-ethernet --为物理接口添加一个类型为Ethernet,链接名为classlink,自动连接,具有如下ip和网关的连接
[root@c7node2 network-scripts]# nmcli con add type ethernet con-name classlink \ ifname eno50332208 autoconnect yes ip4 10.1.255.7/16 gw4 10.1.0.1 [root@c7node2 network-scripts]# ll ifcfg-classlink \\已经生成文件 -rw-r--r--. 1 root root 304 Sep 6 18:02 ifcfg-classlink [root@c7node1 network-scripts]# systemctl restart NetworkManager \\重启网络服务 [root@c7node1 network-scripts]# ip a | grep -e "10.1.255.7" -e "eno5" \\配置生效 4: eno50332208: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.1.255.7/16 brd 10.1.255.255 scope global eno50332208 [root@c7node1 network-scripts]# nmcli con mod classlink +ipv4.addresses \ 10.1.255.77/16 \\修改IP地址,可以使用[+|-|],表示新增或减少一个IP地址,没有符号就直接覆盖原来的配置文件中的IP地址 [root@c7node1 network-scripts]# nmcli connection show classlink | grep IP4.ADD IP4.ADDRESS[1]: 10.1.255.7/16 IP4.ADDRESS[2]: 10.1.255.77/16[root@c7node1 network-scripts]# nmcli con modify classlink -ipv4.add "10.1.255.77/16" [root@c7node1 network-scripts]# nmcli connection show classlink | grep IP4.ADD IP4.ADDRESS[1]: 10.1.255.7/16 [root@c7node1 ~]# nmcli con down classlink \\关闭物理接口 Connection 'classlink' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10) [root@c7node1 ~]# nmcli con show |grep class \\查看状态,最后一栏没有物理口 classlink 36e5c10e-83e0-4f79-9d37-2c6f4d8a79cb 802-3-ethernet -- [root@c7node1 ~]# nmcli con up classlink \\开启物理接口 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11) [root@c7node1 ~]# nmcli con show |grep class \\查看到链接对应有物理口 classlink 36e5c10e-83e0-4f79-9d37-2c6f4d8a79cb 802-3-ethernet eno50332208附:nmcli命令生成的配置文件中选项与配置文件对应项:
五、 几种常见的网卡绑定工作模式:
网卡绑定可以提高网络的冗余,保证网络可靠性,提高网络速度。拥有等许多单网卡没有的优势,在rhel6中该技术名字叫网卡绑定,到了rhel7当中,有了网络工作组的概念实质上原理相同。
1. mode 0 (round-robin)从头到尾的在每一个slave网卡上顺序发送数据包,该模式可以提供负载均衡和容错
2. mode1(active-backup)主备模式,在同一时间只有一个处于活动,为了防止交换机发生混乱此时绑定的mac地址只有一个外部端口可见
3. mode3(broadcast)广播策略在所有的slave接口上传送相同的报文,本模式提供容错能力
六、网卡绑定bonding(以bond0为例)与网络工作组配置:
1. bonding配置步骤:
创建bonding设备的配置文件,然后添加需要绑定的物理设备
卸载bond时,删除相关配置文件,卸载bonding模块,首先使用lsmod找到bonding模块,然后使用rmmod 查到的模块名称(许多人更喜欢使用modprobe -r 模块名)来代替使用rmmod )
[root@cnode6_8 network-scripts]# cat ifcfg-bond0 DEVICE=bond0 //必须配置的设备名 BOOTPROTO=none BONDING_OPTS="miimon=100 mode=0" IPADDR=10.1.255.252 PREFIX=16 GATEWAY=10.1.0.1 DNS1=8.8.8.8 DNS2=114.114.114.114 MACADDR=88:88:88:88:88:88 //这个可以不写只是测试方便看到而已 ONBOOT=yes [root@cnode6_8 network-scripts]# cat ifcfg-eth1 //另一块slave设备与此除了DEVICE不同其他相同 DEVICE=eth3 BOOTPROTO=none MASTER=bond0 //隶属与bond0 SLAVE=yes //隶属关系 USERCTL=no [root@cnode6_8 ~]# cat /proc/net/bonding/bond0 //查看bond设备状态 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 200 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth3 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:c8:95:0e Slave queue ID: 0 Slave Interface: eth4 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:c8:95:2c Slave queue ID: 0 [root@cnode6_8 network-scripts]# ip a |grep bond0 -A 3 //查看bond网卡配置信息 3: eth3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000 link/ether 88:88:88:88:88:88 brd ff:ff:ff:ff:ff:ff 4: eth4: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 00:0c:29:c8:95:22 brd ff:ff:ff:ff:ff:ff 5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 88:88:88:88:88:88 brd ff:ff:ff:ff:ff:ff inet 10.1.255.252/16 brd 10.1.255.255 scope global bond0 inet6 fe80::8a88:88ff:fe88:8888/64 scope link valid_lft forever preferred_lft forever最后用wireshare可以抓到ping包的icmp包:
2. rhel7中网络工作组(Networking Teaming)配置:
网络工作组和旧版的bonding技术相比提供更好的性能和扩展性,由守护进程teamd和内核驱动实现:多种工作方式(runner):broadcast、roundrobin、activebackup、
loadbalance、lacp。其中除了activebackup这种方式外,其它都需要交换机支持,如交换机的端口聚合等技术否则无法实现响应的功能。需要注意的是:在启动网络组时不会启动网络组的物理分配的port接口,需要手动启动,启用物理接口时也不会启动网络组这种逻辑接口。但是禁用网络组接口,会禁用组中的物理port接口。
(1) 创建网络组:
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.
(2) 创建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
具体示例:
下面将创建一个逻辑设备名是team0,物理设备名也叫team0(因为team本来是一个逻辑设备,所以只好指定物理设备也是它啦!其实它是不存在的了),添加两块物理网卡,连接名为team0-port1,team0-port2 。物理网卡真实名字为eno50332208和eno33554984,并设定team的工作方式为activebackup,指定其ip地址dns网关,子网掩码等信息
[root@c7node2 network-scripts]# nmcli con add type team con-name team0 ifname team0 \ config '{"runner": {"name": "activebackup"}}' Connection 'team0' (7a11cf1f-9c4b-4cc0-adf0-88e5e000e861) successfully added. [root@c7node2 network-scripts]# nmcli con mod team0 ipv4.method manual \ ipv4.addresses '10.1.255.101/16' ipv4.gateway '10.1.0.1' ipv4.dns '114.114.114.114' [root@c7node2 network-scripts]# nmcli con add type team-slave con-name team0-port1 \ ifname eno33554984 master team0 Connection 'team0-port1' (ee7edb65-ce6d-446c-be96-7f57be2ddbd7) successfully added. [root@c7node2 network-scripts]# nmcli con add type team-slave con-name team0-port2 \ ifname eno50332208 master team0 Connection 'team0-port2' (80043681-91d9-4c1e-ba1f-e1229b3b02b0) successfully added.使用nmcli命令生成的三个配置文件如下:也可以直接编辑配置文件重启服务使其生效
[root@c7node2 network-scripts]# cat ifcfg-team0 DEVICE=team0 TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}}" #此处配置文件”前面的\是转义作用防止中间的引号与最外面的”混淆 DEVICETYPE=Team BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=team0 UUID=7a11cf1f-9c4b-4cc0-adf0-88e5e000e861 ONBOOT=yes DNS1=114.114.114.114 IPADDR=10.1.255.101 PREFIX=16 GATEWAY=10.1.0.1 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes[root@c7node2 network-scripts]# cat ifcfg-team0-port1 NAME=team0-port1 UUID=ee7edb65-ce6d-446c-be96-7f57be2ddbd7 DEVICE=eno33554984 ONBOOT=yes TEAM_MASTER=team0 DEVICETYPE=TeamPort
[root@c7node2 network-scripts]# cat ifcfg-team0-port2 NAME=team0-port2 UUID=80043681-91d9-4c1e-ba1f-e1229b3b02b0 DEVICE=eno50332208 ONBOOT=yes TEAM_MASTER=team0 DEVICETYPE=TeamPort [root@c7node2 network-scripts]# teamdctl team0 state setup: runner: activebackup runner: active port: #此时查看到的是team的接口是都没有up的状态,但是team0已经启动。 [root@c7node2 network-scripts]# nmcli con up team0-port1 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) [root@c7node2 network-scripts]# nmcli con up team0-port2 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9) [root@c7node2 network-scripts]# teamdctl team0 state setup: runner: activebackup ports: eno33554984 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 eno50332208 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: eno33554984 [root@c7node2 network-scripts]# [root@c7node2 network-scripts]# ping -I team0 10.1.0.1 #验证使用team0 ping网关成功! PING 10.1.0.1 (10.1.0.1) from 10.1.255.101 team0: 56(84) bytes of data. 64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=0.874 ms 64 bytes from 10.1.0.1: icmp_seq=2 ttl=64 time=1.41 ms 64 bytes from 10.1.0.1: icmp_seq=3 ttl=64 time=0.641 ms ^C --- 10.1.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2013ms rtt min/avg/max/mdev = 0.641/0.976/1.413/0.323 ms [root@c7node2 network-scripts]# teamdctl team0 state | grep "active port" active port: eno33554984 [root@c7node2 network-scripts]# 上面可知活动接口为eno33554984当物理上断开一个接口再次查看 #可以看到已经切换活动网卡为备用网卡了,当然当主网卡恢复正常时,为了保证链路稳定性,不会自动切换回来 [root@c7node2 network-scripts]# teamdctl team0 state | grep "active port" active port: eno50332208
七、route路由管理命令:
route -n 查看路由(在windows中可以使用route print打印路由)
使用route命令可以给主机添加或删除路由,其中子网掩码可以用netmask来指定
可以添加0.0.0.0/0表示默认路由
route add|delete [-net|-host] target [netmask ] [gw gateway] [dev interface]
示例:
[root@cnode6_8 ~]# route add -net 8.0.0.0/8 gw 10.1.0.1 dev eth4 [root@cnode6_8 ~]# route add -net 8.0.0.0/16 gw 10.1.0.1 dev eth4 [root@cnode6_8 ~]# route delete -net 8.0.0.0/16 gw 10.1.0.1 dev eth4 [root@cnode6_8 ~]# route delete -net 8.0.0.0/24 gw 10.1.0.1 dev eth4 [root@cnode6_8 ~]# route -n |grep eth4 10.1.0.0 0.0.0.0 255.255.0.0 U 1 0 0 eth4 8.0.0.0 10.1.0.1 255.0.0.0 UG 0 0 0 eth4八、 使用netstat和ss命令查看网络套接字信息:
使用netstat命令查看网络连接路由表,端口信息
常用参数:前面是短选项,管道后面是相应的长选项
-t | --tcp :tcp相关协议
-u |--udp:udp相关协议
-w|raw:raw socket相关
-l |listening:处于监听状态
-a|all :所有状态
-n |numeric:以数字显示ip和端口号
-p|--program : 显示相关进程及PID
-I 显示接口统计信息
示例:(常用的组合:-tan,-uan,-tnl,-unl)
[root@cnode6_8 ~]# netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:54028 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN tcp 0 0 :::111 :::* LISTEN tcp 0 0 :::51792 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:631 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN tcp 0 0 ::1:6010 :::* LISTEN