路由设置实验
在我们的现实生活中, 我们处于不同网段的计算机要实现通讯通常要通过路由器进行转接,比如处于10.1.0.0网络的主机要与处于10.4.0.0网络的主机进行通信,我们就要用到路由器并在路由器中设置路由表来实现通信。其实很简单,就是A机器发出的信息要找到对应的出口,经过一个个路由器的转发到达主机B的过程。下面我们就来简单介绍一下
由于我们是在虚拟机上进行试验,没有真正的路由器,那么我们可以把虚拟机模拟成路由器,
过程图如下:
准备过程:
准备5个虚拟机,2个作为主机,3个假设为路由器。在虚拟机中添加虚拟网卡 与5个虚拟机相对应。
这样虚拟机上的准备就完成了,下面对主机IP以及路由器进行配置。
相关命令以及配置文件
设置IP的配置文件:/etc/sysconfig/network-scripty/ifcfg-eth0[1]
路由表的设置命令:
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
举例:route add -net 10.1.0.0/16 gw 10.2.0.200
route add default gw 10.2.0.201 添加默认路由
也可以写到配置文件中,这样下次开机可有效(不过不建议)/etc/sysconfig/network-scripts/route-IFACE
【Centos6】中关闭NetworkManager协议serice NetworkManager stop开机禁止chkconfig NetworkManager off
【centos6】中关闭防火墙 servcie iptables stop chkconfig iptables off
【centos7】中关闭防火墙 systemctl stop firewalld systemctl stop firewalld
路由器中要开启路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward
抓包命令:tcpdump -i 网卡名 icmp(协议)
IP设置:
主机A的地址设置为10.1.0.100/16
路由器R1的eth0网卡接口设置为10.1.0.200 eth1网卡接口设置为10.2.0.200
路由器R2的eth0网卡接口设置为10.2.0.201 eth1网卡接口设置为10.3.0.200
路由器R3的eth0网卡接口设置为10.3.0.201 eth1网卡接口设置为10.4.0.200
主机B的地址设置为10.4.0.100/16
我们先来配置主机A的IP vim /etc/sysconfig/network-scripty/ifcfg-eth0
IPADDR=10.1.0.100
PREFIX=16
GATEWAY=10.1.0.200
这里我们只需要一个网卡,可以把其他网卡down掉 或者在虚拟机右下角把不用的网卡断开连接
配置R1
eth0:vmnet11
eth1:vmnet12
关闭NetworkManager协议serice NetworkManager stop开机禁止chkconfig NetworkManager off
关闭防火墙 centos6 chkconfig iptables off servcie iptables stop
centos7 systemctl disable firewalld systemctl stop firewalld
配置IP vim /etc/sysconfig/network-scripty/ifcfg-eth0[1]
IPADDR=10.1.0.200[10.2.0.200]
PREFIX=16
添加路由表
route add default gw 10.2.0.201
开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
配置R2
eth0:vmnet12(虚拟网卡对应端口)
eth1:vmnet13
关闭NetworkManager协议 关闭防火墙
配置IP vim /etc/sysconfig/network-scripty/ifcfg-eth0[1]
IPADDR=10.2.0.201[10.3.0.200]
PREFIX=16
添加路由表
route add -net 10.1.0.0/16 gw 10.2.0.200
route add -net 10.4.0.0/16 gw 10.3.0.201
开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
配置R3
eth0:vmnet13(虚拟网卡对应端口)
eth1:vmnet14
关闭NetworkManager协议 关闭防火墙
配置IP vim /etc/sysconfig/network-scripty/ifcfg-eth0[1]
IPADDR=10.3.0.201[10.4.0.200]
PREFIX=16
添加路由表
route add default gw 10.3.0.200
开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
配置主机B
网卡对应:vmnet14
配置IP vim /etc/sysconfig/network-scripty/ifcfg-eth0
IPADDR=10.4.0.100
PREFIX=16
GATEWAY=10.4.0.200
这里我们只需要一个网卡,可以把其他网卡down掉 或者在虚拟机右下角把不用的网卡断开连接
这里我们的主机IP和路由器的路由表已经设置完成,当然就可以实现通信了
同时我们在主机B上进行抓包,看有没有收到主机A发的包
这个实验只是简单的模拟了一下不同网络的主机进行通讯的工作机制,现实网络中的路由器数量很多,每个路由表上不可能记录每一个路由表的信息,所以现实网络中采用的是路由协议(RIP,IGRP,EIGRP等等 ),采取互相帮助来实现不同网络的通讯。
这一周结束了网络基础设置的学习,补充一下所学的命令和补充的小知识
路由命令:
route -n
route add -net[-host] 192.168.0.100/16 gw 192.168.0.1 dev eth0 增加路由
route add default gw 192.168.0.1 增加默认路由
route del -net 192.168.0.100/16 删除路由
ip route add 192.168.0.100/16 via 192.168.0.1
ip route add default via 192.168.0.1
ip route del 192.168.0.100/16
ip route fiush dev eth0 清空路由表
ip route show|list
写入到文件中 /etc/sysconfig/network-scripts/route-eth0
格式示例:10.0.0.0/8 via 172.16.0.1
netstat命令 显示网络连接:
-t tcp协议相关
-u udp协议相关
-a 所有状态
-l 处于监听状态
-n 以数字显示IP和端口
-w raw socket相关
-e 扩展格式
-p 显示相关进程及PID
常用组合:-tan -uan -tnl -unl
显示路由表:netstat -nr
显示接口统计数据:
netstat -i
netstat -Ieth0 单独显示
ifconfig -s eth0 作用相同
ss命令 netstat的更新版
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
常用组合: -tan, -tanl, -tanlp, -uan
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的ssh连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
ss -s 列出当前socket详细信息
ip命令 可作用于3个对象 link addr route
ip addr { add | del } IFADDR dev STRING[label LABEL]:添加地址时指明网卡别名[scope {global|link|host}]:指明作用域 [broadcast ADDRESS]:指明广播地址
网卡别名:
ip addr add 172.16.100.100/16 dev eth0 label eth0:0 添加地址并制定网卡别名
ip addr del 172.16.100.100/16 dev eth0 label eth0:0 删除地址
ip addr flush dev eth0 label eth0:0 清楚网卡别名eth0:0中的地址
ifconfig命令:ifconfig eth0:0 192.168.0.100/24 up[down]
设备别名中必须使用 静态联网(即手动制定IP地址) linux上可以把物理网卡设定为DHCP 结合使用一个自动获取 一个手动指令的地址
主机名:
cat /etc/centos-release 或者在 /eyc/sysconfig/network 下设置主机名 然后 hostname centos6.9生效【centos6】
cat /etc/hostname 创建并修改文件并生效 hostnamectl set-hostname centos7.3 hostnamectl status显示主机名信息【centos7】
bonding工作模式:
实现两个网卡公用一个IP地址 增加吞吐性能 共有7中模式 其中 mode0(balance-rr) mode1(active-backup) mode3(broadcast)比较常用
公用一个MAC地址
创建bonding设备的配置文件
vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0”【centos6】
然后配置ifcfg-eth0[1] MASTER=bond0 SLAVE=yes 重启网络服务
查看bond0状态:/proc/net/bonding/bond0
删除bond0 ifconfig bond0 down rmmod bonding
网卡工作在内核上,bond物理网卡虽然没加到bond下,但是也能ping通
ip route add 2.2.2.2/16 via 2.2.0.1
网卡名变更
CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化
更改配置文件 vim /etc/udev/rules.d/70-persistent-net.rules
ethtool -i eth# 查看网卡驱动
rmmod e1000 卸载网卡驱动
modprobe e1000 装载网卡驱动
CentOS 7使用基于硬件,设备拓扑和设置类型命名:
使用传统命名方式:
编辑 /etc/default/grub配置文件 GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
或:修改/boot/grub2/grub.cfg 为grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
重启系统
nmcli命令:可以工作层 device connection 【centos7】
修改IP地址等属性:nmcli connection modify eth0 +|-iPv4.addresses [ipv4.method manual|auto][ipv4.gateway]……
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
修改连接配置后,需要重新加载配置
nmcli con reload 禁用网卡,访止被自动激活 nmcli dev dis eth0
显示网络接口属性
nmcli device eth0
创建新连接default,IP自动通过dhcp获取 nmcli con add con-name default type Ethernet ifname eth0
删除连接 nmcli con del default
nmcli实现bonding:
添加bonding接口: nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup
添加从属接口: nmcli con add type bond-slave ifname eth0 master mybond0
要启动绑定,则必须首先启动从属接口 nmcli con up bond-slave-eth0
启动绑定 nmcli con up mybond0
DNS设置,存放在/etc/resolv.conf文件中 host dig nslookup host解析的优先级要高于DNS
PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取。等价于下面命令:nmcli con mod “system eth0” ipv4.ignore-auto-dns yes
网络组Network Teaming
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组由内核驱动和teamd守护进程实现
多种方式runner broadcast(广播)roundrobin(轮循)activebackup(主备)loadbalance(平衡)
创建网络组接口:nmcli con add type team con-name 连接名 ifname 接口名 [config JSON]
JSON 指定runner方式 格式:'{"runner": {"name": "METHOD"}} 举例 '{"runner":{"name":"broadcast"}}'
创建port接口
nmcli con add type team-slave con-name 连接名 ifname 网络接口名 master 网络组接口名
nmcli con add con-name team0-eth1 type teamslave ifname eth1 master team0
使用nmcli命令一步建立网络组:
nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'ipv4.method manual iPv4.addresses '172.17.0.150/16'
nmcli con up team0
nmcli con up team0-eth1
nmcli con up team0-eth2
teamdctl team0 state
配置文件为/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.25.5.100
PREFIX0=24
NAME=team0
删除网络组
nmcli connection down team0
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
或者直接删除配置文件
网桥的设置:
使用nmcli命令一步设置网桥:
nmcli con add type bridge con-name br0 ifname br0 ipv4.method manual ipv4.addresses 172.16.0.6/16
nmcli con add type bridge-slave con-name br0-port0 ifname eth0 master br0
删除网桥 brctl delbr br0
删除网桥中网卡 brctl delif eth0