2017-05-05 22:24 初稿;未完待续
2017-05-07 补充 nmcli 的基本用法
================
管理网络服务的脚本 CentOS 5 /etc/init.d/network {start|stop|restart|status}, CentOS 6 /etc/init.d/NetworkManager {start|stop|restart|status} 建议 6 上也使用 network 而停用 NetworkManager <--- NetworkManager 服务开启时,network 服务不生效 -------------------------------- service NetworkManager stop <--- 本次停掉 NetworkManager chkconfig NetworkManager off <--- 永久停掉6上的 NetworkManager -------------------------------- service 是一个 shell 脚本,即 /sbin/service chkconfig 是一个二进制程序,本文最后有 chkconfig 的用法讲解 -------------------------------- CentOS 6.0 可在 /etc/udev/rules.d/70-persistent-net.rules 修改网卡名称,需要与网卡配置文件 /etc/sysconfig/network-script/ifcfg-* 中的 DEVICE 字段一致,网卡配置文件建议命名为 ifcfg-nicName 每添加一块网卡,建议在 /etc/sysconfig/network-script/ 下建立 ifcfg-nicName 的配置文件 -------------------------------- 查看网卡驱动模块 ethtool -i nicName ---> 得到 e1000,应该是千兆网卡。用 lsmod | grep 'e1000' 验证下是否加载了该模块 卸载网卡驱动模块 rmmod e1000 或者 modprobe -r e1000 加载网卡驱动模块 modprobe e1000 =========== 网络配置命令 ip ip [OPTIONS] OBJECT COMMAND 常用 OBJECT 有 link ,address,route 常用 COMMAND 有 set,add,del,show 具体常用用法如下: ----------链路--------- ip link show [nicName] <--- 结果其实是 ip add show 的一部分 ip link show [up] ip link set nicName {up | down} ip link set nicName promisc {on | off} // 是否开启混杂模式 ip link set nicName mtu # // 设置 MTU 大小(MTU相关知识点见上一篇) ip link set nicName address 12:23:34:45:56:67 // 设置网卡 MAC 地址 ---------IP地址--------- ip add add ifAddress dev nicName [label nicAlias ] <--- 给网卡指派一个 secondary IP,可以打上网卡别名 ip add replace ifAddress dev nicName [label nicAlias ] <--- 修改替换某路由条目 ip add del ifAddress dev nicName [label nicAlias ] <--- flush 与 del 的区别是什么? ip add show [dev nicName ] [label nicAlias ] #------------------------------------------------ 若新建了网卡别名并指派了 IP,如给 loopback 接口一个非 127 的 IP,需要手动建立一个别名网卡配置文件以永久生效 如: /etc/sysconfig/network-scripts/ifcfg-lo:# 注意:非 primary 地址不能使用 DHCP 动态获取IP,ONPARENT 字段设置是否随物理网卡激活,应设置为 yes ---------IP路由--------- ip route add destIPsegment/# dev nicName [metric # ] // 无掩码则认为是主机路由;到同一目的可以添加两条路由, metric 不同即可 ip route add destIPsegment/# via nexthop [metric # ] // 建议 dev 和 via 二选一,两个都给出万一对不上呢 ip route del destIPsegment // 删除目的路由 ip route show [dev nicName ] [via prefix ] ip route flush [dev nicName ] [via prefix ] // 清空指定路由表 ip route add default [dev nicName ] [via prefix ] ip route del default [dev nicName ] [via prefix ] =========== 网络状态查看 SS(dump socket statistics) ss [options] [FILTER] -----------------options---------------- 不加选项默认查看 established 状态的连接 -l listen 状态的连接 -a listen + established 状态的连接 -p 相关的程序及PID -n 数字格式 // 即不根据 port 去解析服务名 -t tcp协议相关 -u udp协议相关 -w 裸套接字相关 -x unix sock相关 -e 扩展的信息 -m 内存用量 -o show timer information <--- 哪个 timer ? keepalive ? -s summary,socket 信息汇总 -----------------FILTER--------------------- state TCP-STATE, 如:ss -a -t state fin-wait-1 [ expression ],如:ss -a -t dst 192.168.10.1 ==========一些老工具 =========== ifconfig ifconfig [INTERFACE] -a 显示所有接口的信息 ,不加 -a 则仅显示状态为up的端口信息 -s [eth#] 显示接口收发信息情况(含丢包),效果等同于下面的 netstat -Ieth# ifconfig eth1 192.168.1.1/8 <--- 手动配置地址 ifconfig eth1 [up|down] 立即生效,但重启网络服务后失效; ----------------------------------------- route -n 所有地址均以数值方式显示(比如显示0.0.0.0而非default,可以和不加-n的对比下) <--- route -n 比 ip route show 要好一些 结果flags字段中常见标志的意思 U route is up G use gateway H target is a host D dynamically ! reject route 常见用法: route{add | del} [-host | -net] dev IF <--- 还要指定 host 或 net ,太麻烦,所以建议用 ip route add route add -net 192.168.2.0 netmask 255.255.255.0 dev eth0 route del -net 192.168.2.0 netmask 255.255.255.0 route add -host 192.168.2.1 dev eth0 route del -host 192.168.2.1 ----------------------------------------- netstat -t 列出 tcp 网络数据包的数据 -u 列出 udp 网络数据包的数据 -n 列出进程端口号而非服务名称 -l 列出正在 listening 的服务(默认只显示连接的) -a 列出所有的服务 -p 列出网络服务的 PID -i 列出各个端口收发信息(效果等同于 ifconfig -s),-Ieth# 查看指定某个接口 lsof -i TCP:22 查看 TCP 22 端口哪个进程开的 // lsof 貌似很多地方用啊,list open file ================================================ 网络配置文件 ----------------------主机名---------------------- /etc/sysconfig/network <--- CentOS6,补充:该文件下也可以定义 GATEWAY ,不过优先级低于 ifcfg-### 中指派的网关 NETWORKING=yes HOSTNAME=os6.freeland //主机名 /etc/hostname <--- CentOS7 HOSTNAME=os7.freeland ----------------------网卡配置文件---------------------- /etc/sysconfig/network-scripts/ifcfg-## <--- 该文件名可以随意,但是建议和设备名相同。系统读取该配置文件初始化网卡。系统启动后,重启network服务时,如果读不到某网卡的配置文件,则不会刷新系统中该网卡信息。如果系统启动时,读不到某网卡配置文件,则初始化失败。 DEVICE= 关联的设备,CentOS6上要与 /etc/udev/rules.d/70-persistent-net.rules 中的nicName保持一致 BOOTPROTO={static | none | dhcp | bootp}引导协议,要是用静态,可配置为static或none IPADDR= METMASK= GATEWAY= DNS1= DNS2= 此处配置的 DNS server 信息会写入/etc/resolv.conf 中(如果PEERDNS 字段为 0 的话) ONBOOT= 是否自动激活此网络接口(当进程读取该配置文件时判断) PEERDNS={yes|no} 是否在BOOTPROTO为 dhcp 时接受有DHCP服务指定的DNS地址,即将 DNS server 信息写入/etc/resolv.conf 中 HWADDR= 硬件地址,要与硬件中的地址保持一致,可省略 <--- HWADDR 或 DEVICE 都能确定一个网卡,即如果有HWADDR,DEVICE可以省略 MACADDR= 系统中的 MAC 地址,测试发现改了并没有卵用,不生效 MTU= USERCTL={yes|no} 是否允许普通用户控制此接口 各个字段的含义见: /usr/share/doc/initscripts-***/sysconfig.txt ------------------------路由配置文件------------------------ /etc/sysconfig/network-scripts/route-eth# <--- 新建的,系统本身不存在,而且名字 route-nicName 必须与真正的网卡名匹配,和ifcfg-xxx 不一样,不能随意指派。 添加格式0 DST/MASK dev nicName [metric #] 添加格式1 DST/MASK via NEXTHOP {metric #] 如:192.168.1.0/24 via 0.0.0.0 添加格式2 <--- 不支持 METRIC 到同一目的不能添加两条路由 ADDRESS0= NETMASK0= GATEWAY0= ADDRESS1= NETMASK1= GATEWAY1= ============================ ==== DNS服务器手工指定方法只有一种,即配置文件 /etc/resolv.conf <--- service 或 NM 生成的,网卡配置文件也是这样 nameserver DNS_IP_1 nameserver DNS_IP_2 若无DNS,使用本地 hosts 文件 /etc/hosts 主机IP 主机名 主机别名 系统先查本地HOSTS,没有再查DNS,但是优先级可以改变,修改 /etc/nsswitch.conf 中如下字段 hosts: files dns <--- 把 dns 放在前面即可 ====================================== 网卡 bonding 关于 bonding 的更多信息参考 /usr/share/doc/kernel-doc-###/Documentation/networking/bonding.txt,该文本文件随包 kernel-doc 安装 也可以去 www.kernel.org 找到,这里只简单介绍几种 bonding 模式 mode 0 即 round-robin,接口轮流发送数据包(注意是发送,接收的话由直连数通设备控制) mode 1 即 active-backup,主备模式 mode 3 即 broadcast,在所有 slave 接口上均发送数据,会出现 dup ----------Step 01---------- 创建 bonding 设备的配置文件 /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BOOTPROTO=none BONDING_OPTS="miimon=100 mode=1" // miimon 表示检测间隔为 100ms ----------Step 02---------- 设置 bonding 成员的配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none MASTER=bond0 SLAVE=yes USERCTL=no 设置 bonding 成员的配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BOOTPROTO=none MASTER=bond0 SLAVE=yes USERCTL=no ----------Step 03---------- service network restart 查看 bond0 运行状态, cat /proc/net/bonding/bond0 在 service network restart 之前执行 lsmod | grep 'bonding' 发现 bonding 模块并没有加载,重启 network 后执行 lsmod 发现该模块被加载,应该是 network 读到 ifcfg-bond0 后加载的 bonding 模块。ip add show 发现 bond0 已经获得 IP 并正常工作。 停用 bonding,先关闭 bond0,即 ip link set dev bond0 down,然后删除 bonding 模块,即 rmmod bonding(或 modprobe -r bonding)之后删除 ifcfg-bond0 配置文件(否则后续重启 network,还会读此文件,进而激活 bonding 模块)。 ========================={ CetnOS 7 nmlcli 简单用法总结}============================= CentOS 7 上网卡命名机制与 6 不同,为了统一网卡名称,可通过如下方式将 CentOS 7 上的网卡命名规则恢复至与 6 相同 /etc/default/grub 中 GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet" 中的 quiet 后加入 net.ifnames=0 然后执行 grub2-mkconfig -o /etc/grub2.cfg 生成 cfg 配置文件 或直接修改 cfg 文件 /etc/grub2.cfg(软链接至/boot/grub2/grub.cfg),在 inux16 /vmlinuz-3.10.0-514.el7.x86_64 root=UUID=f62eba08-f8ce-4cb4-b435-ad56e21ce 4db ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8 这一行末添加 net.ifnames=0 在未清楚网卡命名机制之前,不建议回退到 CentOS6 式的命名 <--- CentOS7 上的命名机制需要找时间详细了解下 =========== nmcli(command-line tool for controlling NetworkManager) nmcli [OPTIONS] OBJECT COMMAND {ARGUMENTS} 常用 OBJECT 有 connection,device ,networking 常用 COMMAND 有 show,up,down,status,on,off, 具体常用用法如下: ----------connection--------- nmcli 可以配置多套网络(网卡)配置文件(称为 connections)用以初始化网络设置,但只能选择其中某一套生效,connections 对应着网卡配置文件,即 /etc/sysconfig/network-script/ifcfg-# 此配置文件的文件名中的 # 还是建议与网卡名对应(最好再与文件中的 NAME 字段对应好),且 强烈建议不要在配置文件中使用 DEVICE 指明是哪个网卡的配置文件,而唯一使用 HWADDR 指明之。配置文件中 NAME 可以重名(但强烈不建议给自己挖坑),但 UUID 是唯一标示该 connection 配置文件的,也就是表示一个网卡配置方案,如果两个配置文件的 UUID 相同,使用 nmcli conn show 只能显示得到一个。 nmcli conn show <--- 查看所有的 connection 配置文件,结果中的 NAME 即配置文件中的 NAME 字段,取名时应取一个有意义的。 nmcli conn up id xxx <--- 启用某 connection ,xxx 就是我们上面 show 出来的 NAME ,由于我们在配置文件中已经指明了 HWADDR,因此这里不用再指明对哪个接口启用此配置。 nmcli conn up uuid yyy <--- 启用某 connection ,yyy 就是我们上面 show 出来的 UUID nmcli conn down id | uuid yyy <--- down 掉一个 connection,ip add show dev nicName 可看到 IP 没了,链路还是 up 的(联想接口物理状态和 protocol 状态) nmcli 还提供了修改 网卡配置文件 的功能,可以通过 man 获得试用帮助,我们可以通过手动改,然后 reload 该文件。 nmcli conn load configFile <--- reload/load 指定配置文件 nmcli conn reload <--- reload 所有配置文件(ifcfg-*) -------------device------------ nmcli dev show nmcli dev status nmcli dev disable nicName <--- 和通过 nmcli conn down ,关掉 nicName 所有 connection 一个效果 -------------networking------------ nmcli networking {on | off} <--- 使能/禁用网络功能 -------------nmcli 配置 bond------------ 添加bonding接口 <--- 配置完后会发现 /etc/sysconfig/network-script/ 下多了 bonding 的配置文件 nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup 添加从属接口 nmcli con add type bond-slave ifname ens5 master mybond0 nmcli con add type bond-slave ifname ens6 master mybond0 首先启动从属接口 nmcli con up bond-slave-ens5 nmcli con up bond-slave-ens6 启动绑定 nmcli con up mybond0 小结:重要的还是需要熟悉 /etc/sysconfig/network-script/ 下的配置文件 -------------nmcli 配置 team------------ team 是不同于 bond 的网卡聚合技术,待研究。 控制来自网络的链接 /etc/hosts.allow /etc/hosts.deny 只要不支持TCP Wrapper函数功能的软件程序就无法使用上述两个配置文件的设置值。可以通过 ldd(library dependency discovery)查询某程序是否有支持libwrap.so。 补充: ping,traceroute,mtr,tracepath 的使用 lftp,lftpget(非交互),wget 的使用 chkconfig 用法 dmesg ---> The program helps users to print out their bootup messages arping 的原理补于此 防火墙 iptables -vnL 查看 iptables -F 关闭防火墙 os6上永久关闭防火墙 chkconfig iptables off os7上systemctl disable firewalld.service