8.1 路由
8.1.1 路由表产生的类型
1. 依据网络接口产生的IP二存在的路由2. 手动或预设路由(default route)注意:你所规划的路由必须是你的装置(如eth0)可以直接沟通的情况(反过来说,如果想连接到一个和当前主机直接相连的路由,那么主机的路由表中必须有那个路由的信息)# route add -net 192.168.5.0 netmask 255.255.255.0 dev eth0 ----假设与eth0连接的路由的IP为192.168.5.2543. 动态路由的学习
注意:需要额外软件的支持,比如zebra、quaggaa
8.1.2.1 IP Alias几个常见的用途
1. 建立虚拟的网络接口来连接一个虚拟的网络接口ifconfig [device] [IP] netmask [netmask IP] [up|down]# ifconfig eth0:0 192.168.0.100 netmask 255.255.255.0 up ----在eth0上启动一个新的接口(不需要更动原来的网络参数)2. 在一个实体网域中含有多个IP网域3. 既有设备无法提供更多实体网卡
8.1.3 如何在开机时启动IP Alias
注意:如果是DHCP获得IP的方式要使用实体网卡才可以(也不一定)
注意:如果是DHCP获得IP的方式要使用实体网卡才可以(也不一定)
方式一:. 将ifconfig指令写入/etc/rc.d/rc.local,当然因为没有写入network的配置文件,因此重启网络无法重启IP Alias# vim /rc.d/rc.localifconfig eth0:0 192.168.0.100 netmask 255.255.255.0 up方式二:透过建立虚拟设备的配置文件# cd /etc/sysconfig/network-scripts# vim ifcfg-eht0:0 ----编写独立的配置文件
DEVICE=eth0:0 ----与文件名对应ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.0.100NETMASK=255.255.255.0
# ifup eth0:0 ----启动这个虚拟设备# ifdown eth0:0 ----关闭这个虚拟网卡# /etc/init.d/network ----重启整个网络可以启动这个虚拟设备
8.1.3 重复路由的问题
注意:多个IP不要设在同一个网域,根据路由规则来自多个接口的封包有可能只会从一个接口给与响应,无法均衡带宽
注意:多个IP不要设在同一个网域,根据路由规则来自多个接口的封包有可能只会从一个接口给与响应,无法均衡带宽
8.2 路由器架设
8.2.1 什么是路由器与IP分享器:sysctl.conf
8.2.1.1 路由功能实现方式
8.2.1 什么是路由器与IP分享器:sysctl.conf
8.2.1.1 路由功能实现方式
1. 硬件功能:路由器内有嵌入式操作系统2. 软件功能:例如Linux操作系统的核心就提供封包转递的能力# cat /proc/sys/net/ipv4/ip_forward ----Linux核心转递封包配置文件1. 启动封包转递方式一# echo 1 > /proc/sys/net/ipv4/ip_forward ----启动档案中的设定,不过重启后会失效2. 启动封包转递方式二# vim /etc/sysctl.conf ----修改系统配置文件达成封包转递的功能net.ipv4.ip_forward=1 ----本来为0# sysctl -p ----立即让该设定生效
8.2.1.2 路由设备规划路由的两种方式
1. 静态路由:直接以类似route的指令直接设定路由表到核心功能当中,设定值只要与网域环境相符即可。(当网域有变化时,需要手动重新设定)2. 动态路由:透过类似quagga或zebra软件的功能(动态侦测网域的变化)
8.2.1.3 IP分享器(NAT服务器,Network Address Translatiuon,网络地址转换)
注意:NAT本身就是一个路由器,只是多了一个IP转换的功能。只有路由器两端的网域分别是公有IP和私有IP时才需要NAT功能。
1. 如果路由器的两个接口一个是public IP,一个是private IP,因为私有IP不能直接与公共IP沟通其路由信息,此时就需要额外的NAT服务;2. Linux的NAT服务器透过修改封包的IP表头数据之来源或目标IP,让来自私有IP的封包转成NAT服务器的公有IP,就可以连上Internet
8.2.2 何时需要路由器
1. 实体线路之布线及效能的考虑2. 独立部门与保护数据的考虑
8.2.3 静态路由之路由器实作
1. 网络结构
1. 网络结构
Internet----------------------------|------------------------------------Router A(NAT)|workstation—— Hub/Switch—— Linux Router|-------------------------------------------------------client Linux —— Hub/Switch——winxp|win7-------------------------------------------------------
2. 节点信息
Router A:IP外(public IP)IP内(192.168.1.254/24)Routing(192.168.100.0/24->Linux Router)Default gateway(外部ISP提供)-------------------------------------------------Linux Router:IP外(192.168.1.100/24)IP内(192.168.100.254/24)Default gateway(192.168.1.254)workstationx:IP:192.168.1.101Default gateway:192.168.1.254option(加入Linux Router)-------------------------------------------------client Linux:IP:192.168.100.10Default gateway:192.168.100.254win7:IP:192.168.100.20Default gateway:192.168.100.254winxp:IP:192.168.100.20Default gateway:192.168.100.254-----------------------------------------------------
3. 设置Linux Router
第一步:设置对外的eth0接口# vim /etc/sysconfig/network-scrips/ifcfg-eth0
DEVICE="eth0"HWADDR="08:00:27:71:85:BD"NM_CONTROLLED="no"ONBOOT="yes"BOOTPROTO=noneIPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.254 ----透过Router A连接出去
第二步:再处理eth1这张之前你一直没有驱动的网络卡(内网),对内不需要网关# vim /etc/sysconfig/network-scrips/ifcfg-eth1
DEVICE="eth1"HWADDR="08:00:27:2A:30:14"NM_CONTROLLED="no"ONBOOT="yes"BOOTPROTO=noneIPADDR=192.168.100.254NETMASK=255.255.255.0
第三步:启动IP转递# vim /etc/sysctl.confnet.ipv4.ip_forword=1 ----启动转递封包功能# sysctl -p ----立即启动封包转递功能# cat /proc/sys/net/ipv4/ip_forword
1 ----是1就对了
第四步:重新启动网络,并且观察路由与ping Router A
# /etc/init.d/network restart
----重启网络
# route -n
----查看路由表,看看默认网关设置是否正确
# ping -c 2 192.168.1.254
----ping一下网关(Router A)
第五步:暂时关闭防火墙!这一步也很重要
# /etc/init.d/iptables stop
4. 设置受保护的网域内的主机(以clientlinux为例)
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
----eht0是仅有的一张网卡
DEVICE="eth0"HWADDR="08:00:27:2A:30:14"NM_CONTROLLED="no"ONBOOT="yes"BOOTPROTO=noneIPADDR=192.168.100.10NETMASK=255.255.255.0GATEWAY=192.168.100.254 ----Linux RouterDNS1=168.95.1.1 ----有这个就不需要修改/etc/resolv.conf
# /etc/init.d/network restart
----重启网络
# route -n
----查看下路由表信息
# ping -c 2 192.168.100.254
----ping Linux Router试试
# ping -c 2 192.168.1.254
----ping Router A 会失败,发起联机的封包发到Router A,Router A知道封包的来源IP,但路由表中没有下层网域的记录,因此就走默认网关,发到外网去了,回不来了
# route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.1.100
----这样那个ICMP封包就能找回去了,但下次重启后设个设定就无效了
# vim /etc/sysconfig/network-scripts/route-eth0
----建立路由配置文件
192.168.100.0/24 via 192.168.1.100 dev eth0
----【目标网域 via 透过的网关 dev 装置】
5. 设置让workstation与clientlinux不透过Router A的沟通方式
# vim /etc/sysconfig/network-scripts/route-eth0
----workstation的eth0网卡
192.168.100.0/24 via 192.168.1.100 dev eth0
----这个路由器和workstation连在同一个集线器上
8.3 动态路由架设:quagga(zebra+ripd)
8.3.1 准备工作
1. 常见的动态路由协议
RIPv1, RIPv2, OSPF, BGP等
2. zebra与RIP
zebra:
这个daemon负责更新核心的路由规则。
RIP:
这个daemon则是想附近的其它Router沟通协调路由规则的传送与否。
3. 安装quagga
注意:各个路由服务的配置文件都必须以/etc/quagga/*.conf的档名来存储
# yum install quagga
----zebra的延伸,这个软件提供的动态路由协议放置在/etc/quagga/
8.3.2 练习quagga
8.3.2 练习quagga
-----------------------------------------------------------------------
Router Z1——
Switch
——Router Z2
|
|
PC Z1——
Switch
——PC Z2
PC Z3——
Switch——PC Z4
-----------------------------------------------------------------------
节点信息:
----------------------------------
Router Z1:
IP1:
192.168.1.200/24
IP2:
192.168.200.254/24
Default getway:
192.168.1.254
Router Z2:
IP1:
192.168.1.100/24
IP2:
192.168.100.254/24
----------------------------------------
PC Z1:
IP:
192.168.200.10
PC Z1:
IP:
192.168.200.10
-----------------------------------------
1. 将所有主机的IP设定妥当
注意:路由器即
Router Z1和
Router Z2除了网络参数设定妥当外还需要加上ip_forword参数的设定
2. 在两部Router上面设定zebra
第一步:先设定会影响动态路由服务的zebra并启动zebra
# vim /etc/quagga/zebra.conf
----编辑quagga的配置文件
hostname www.centos.vbird ----给与这个路由器一个主机名,随便去
password linuxz1 ----给与一个密码
enable passwd linuz1 ----将这个密码生效
logfile /var/log/quagga/zebra.log ----将所有的zebra产生的信息存到登录文件中
# /etc/init.d/zebra start
----启动zebra服务
#
chkconfig zebra on
----设定开机自动启动
# netstat -tunlp | grep zebra
----看看这个服务是否启动顺便看看开启了那个端口(2601)
# telnet localhost 2601
----登陆zebra服务
>show ip route
-------------------------------------------------------------------
|
K:
代表以类似route指令加入核心的路由规则,包括route-ethN所产生的规则
|
C:
代表由你的网络接口所设定的IP而产生的路由规则
|
S:
以zebra功能所设定的静态路由信息
|
R:
就是透过RIP协议所增加的路由规则
-------------------------------------------------------------------
# vim /etc/quagga/zebra.conf
ip route 10.0.0.0/24 eth0
----新增这一行(添加一条新的路由信息)
3. 在两部Router上面设定ripd
# vim /etc/quagga/ripd.conf
----设定Router Z1
hostname www.centos.vbird
----设定Router的主机名
password linuxz1 ----设定好自己的密码
debug rip events ----可以记录较多的错误信息
debug rip packet
router rip ----启动Router的rip功能
version 2 ----启动的是RIPv2的服务(默认)
network 192.168.1.0/24 ----这就是我们管理的接口
network 192.168.100.0/24
interface eth0 ----针对外部的那个接口,略过身份验证
no ip rip authentication mode ----略过身份验证
log file /var/log/quagga/zebra.log ----登录档设定与zebra相同即可
# /etc/init.d/ripd start
----重启ripd
# chkconfig ripd on
----设置开机启动
# netstat -tulnp | grep ripd
----查看启动状况
4. 检查RIP协议的沟通结果
8.4 特殊状况:路由器两边界面是同一个IP网段:ARP Proxy
1. 网络结构
Internet
----------------------------|-----------------------------------------
Router A(NAT)
|
PC 1—— Hub/Switch—— Linux Router
|
-------------------------------------------------------
PC 2
—— Hub/Switch——
PC 4
|
PC 3
-------------------------------------------------------
2. 节点信息
Router A:
IP(外):public IP
IP(内):192.168.1.254
---------------------------------
Linux Router:
IP(eht0 外):192.168.1.100/24
IP(eth1 内):
192.168.1.200/24
PC 1:
IP: 192.168.1.101
---------------------------------
PC 2:
IP:
192.168.1.10
PC 3:
IP:
192.168.1.20
PC 4:
IP:
192.168.1.30
---------------------------------
3. 设定Linux Router(以下命令可以制作成一个脚本设定每次开机自动执行)
第一步:先设定外部eth0的ARP Proxy,让三个IP对应到自己的MAC,让外部接口拥有三个IP的操控权
# arp -i eth0 -s 192.168.1.10 08:00:27:71:85:BD pub
----设定PC 2的IP对应Linux Route rMAC
# arp -i eth0 -s 192.168.1.10 08:00:27:71:85:BD pub
----
设定PC 3的IP对应Linux Router MAC
# arp -i eth0 -s 192.168.1.10 08:00:27:71:85:BD pub
----
设定PC 4的IP对应Linux Router MAC
# arp -n
----查看一下ARP对应
第二步:开始处理路由,增加PC2-PC4的单记录有经过内部的eth1来传递
# route add -host 192.168.1.10 eth1
----路由到PC2(如果路由到一个路由器,会是一个网域,而且经由一个网关,网关是路由器的IP)
# route add
-host 192.168.1.20 eth1
# route add -host 192.168.1.20 eth1
# route add -host 192.168.1.30 eth1
第三步:设定一下内部的ARP Proxy工作(绑在eth1上头),这样PC2-PC4传递到PC1或Router A的封包就能够透过Linux Router传递出去
# arp -i eth1 -s 192.168.1.101 08:00:27:2A:30:14 pub
----PC1
# arp -i eth1 -s 192.168.1.254 08:00:27:2A:30:14 pub
----Router A
第四步:清除掉eth1的192.168.1.0/24(因为上面我们已经建立了新的路由规则了)
# route del -net 192.16.1.0 netmask 255.255.255.0 eth1
8.5 重点回顾
8.6 本章习题6
8.1.2 一个网卡绑定多个IP:IP Alias的测试功能