本文是小编带来什么是路由器架设,欢迎大家阅读。
我们知道在区域网路里面的主机可以透过广播的方式来进行网路封包的传送,但在不同网段内的主机想要互相连线时,就得要透过路由器了。 那么什么是路由器?他的主要功能是什么?下面我们就来读文网!
静态路由之路由器
假设在贵公司的网路环境当中,除了一般职员的工作用电脑是直接连接到对外的路由器来连结网际网路, 在内部其实还有一个部门需要较安全的独立环境,因此这部份的网路规划可能是这样的情况 :
静态路由之路由器架构示意图
以上图的架构来说,这家公司主要有两个 class C 的网段,分别是:
一般区网(192.168.1.0/24) :包括 Router A, workstation 以及 Linux Router 三部主机所构成;
保护内网(192.168.100.0/24):包括 Linux Router, clientlinux, winxp, win7 等主机所构成。
其中 192.168.1.0/24 是用来做为一般员工连接网际网路用的,至于 192.168.100.0/24 则是给特殊的部门用的。workstation 代表的是一般员工的电脑,clientlinux 及 winxp, win7 则是特殊部门的工作用电脑, Linux Router 则是这个特殊部门用来连接到公司内部网域的路由器。在这样的架构下, 该特殊部门的封包就能够与公司其他部门作实体的分隔了。
由上图你也不难发现,只要是具有路由器功能的设备 (Router A, Linux Router) 都会具有两个以上的介面, 分别用来沟通不同的网域,同时该路由器也都会具有一个预设路由啊! ^_^! 另外,你还可以加上一些防火墙的软体在 Linux Router 上,以保护 clientlinux, winxp, win7 呢!
那我们先来探讨一下连线的机制好了,先从 clientlinux 这部电脑谈起。如果 clientlinux 想要连上 Internet,那么他的连线情况会是如何?
发起连线需求:clientlinux --> Linux Router --> Router A --> Internet
回应连线需求:Internet --> Router A --> Linux Router --> clientlinux
观察一下两部 Router 的设定,要达到上述功能,则 Router A 必须要有两个介面,一个是对外的 Public IP 一个则是对内的 Private IP ,因为 IP 的类别不同,因此 Router A 还需要额外增加 NAT 这个机制才行,这个机制我们在后续章节会继续谈到。 除此之外,Router A 并不需要什么额外的设定。至于 Linux Router 就更简单了!什么事都不用作,将两个网路介面卡设定两个 IP , 并且启动核心的封包转递功能,立刻就架设完毕了!非常简单!我们就来谈一谈这几个机器的设定吧!
Linux Router
在这部主机内需要有两张网卡,鸟哥在这里将他定义为 (假设你已经将刚刚实作的 eth0:0 取消掉了):
eth0: 192.168.1.100/24
eth1: 192.168.100.254/24
# 1. 再看看 eth0 的设定吧:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="08:00:27:71:85:BD"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.254 <==最重要的设定啊!透过这部主机连出去的!
# 2. 再处理 eth1 这张之前一直都没有驱动的网路卡吧!
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
HWADDR="08:00:27:2A:30:14"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR=192.168.100.254
NETMASK=255.255.255.0
# 3. 启动 IP 转递,真的来实作成功才行!
[root@www ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 找到上述的设定值,将预设值 0 改为上述的 1 即可!储存后离开去!
[root@www ~]# sysctl -p
[root@www ~]# cat /proc/sys/net/ipv4/ip_forward
1 <==这就是重点!要是 1 才可以呦!
# 4. 重新启动网路,并且观察路由与 ping Router A
[root@www ~]# /etc/init.d/network restart
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
# 上面的重点在于最后面那个路由器的设定是否正确哟!
[root@www ~]# ping -c 2 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.294 ms
64 bytes from 192.168.1.254: icmp_seq=2 ttl=64 time=0.119 ms <==有回应即可
# 5. 暂时关闭防火墙!这一步也很重要喔!
[root@www ~]# /etc/init.d/iptables stop
有够简单吧!而且透过最后的 ping 我们也知道 Linux Router 可以连上 Router A 啰!这样你的 Linux Router 就 OK 了吶!此外,CentOS 6.x 预设的防火墙规则会将来自不同网卡的沟通封包剔除,所以还得要暂时关闭防火墙才行。 接下来则是要设定 clientlinux 这个被保护的内部主机网路咯。
受保护的网域,以 clientlinux 为例
不论你的 clientlinux 是哪一种作业系统,你的环境都应该是这样的:
IP: 192.168.100.10
netmask: 255.255.255.0
gateway: 192.168.100.254
hostname: clientlinux.centos.vbird
DNS: 168.95.1.1
以 Linux 作业系统为例,并且 clientlinux 仅有 eth0 一张网卡时,他的设定是这样的:
[root@clientlinux ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=none
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.254 <==这个设定最重要啦!
DNS1=168.95.1.1 <==有这个就不用自己改 /etc/resolv.conf
[root@clientlinux ~]# /etc/init.d/network restart
[root@clientlinux ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 1 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.100.254 0.0.0.0 UG 0 0 0 eth0
[root@clientlinux ~]# ping -c 2 192.168.100.254 <==ping自己的gateway(会成功)
[root@clientlinux ~]# ping -c 2 192.168.1.254 <==ping外部的gateway(会失败)
最后一个动作有问题哟!怎么会连 ping 都没有办法 ping 到 Router A 的 IP 呢?如果连 ping 都没有办法给予回应的话, 那么表示我们的连线是有问题的!再从刚刚的回应连线需求流程来看一下吧!
发起连线:clientlinux --> Linux Router (OK) --> Router A (OK)
回应连线:Router A (此时 router A 要回应的目标是 192.168.100.10),Router A 仅有 public 与 192.168.1.0/24 的路由,所以该封包会由 public 介面再传出去,因此封包就回不来了...
发现了吗?网路是双向的,此时封包出的去,但是非常可怜的,封包回不来~那怎办呢?只好告知 Router A 当路由规则碰到 192.168.100.0/24 时,要将该封包传 192.168.1.100 就是了!所以你要这样进行。
特别的路由规则: Router A 所需路由
假设我的 Router A 对外的网卡为 eth1 ,而内部的 192.168.1.254 则是设定在 eth0 上头。 那怎么在 Router A 增加一条路由规则呢?很简单啊!直接使用 route add 去增加即可!如下所示的情况:
[root@routera ~]# route add -net 192.168.100.0 netmask 255.255.255.0
> gw 192.168.1.100
不过这个规则并不会写入到设定档,因此下次重新开机这个规则就不见了!所以,你应该要建立一个路由设定档。 由于这个路由是依附在 eth0 网卡上的,所以设定档的档名应该要是 route-eth0 喔!这个设定档的内容当中,我们要设定 192.168.100.0/24 这个网域的 gateway 是 192.168.1.100,且是透过 eth0 ,那么写法就会变成:
[root@routera ~]# vim /etc/sysconfig/network-scripts/route-eth0
192.168.100.0/24 via 192.168.1.100 dev eth0
目标网域 透过的gateway 装置
[root@routera ~]# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
120.114.142.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.100.0 192.168.1.100 255.255.255.0 UG 0 0 0 eth0
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 0 0 0 eth1
0.0.0.0 120.114.142.254 0.0.0.0 UG 0 0 0 eth1
上述观察的重点在于有没有出现 192.168.100.0 那行路由!如果有的话,请 ping 192.168.100.10 看看能不能有回应? 然后再到 clientlinux 上面去 ping 192.168.1.254 看看有没有回应,你就知道设定成功咯!好了,既然内部保护网路已经可以连上 Internet 了,那么是否代表 clientlinux 可以直接与一般员工的网域,例如 workstation 进行连线呢?我们依旧透过路由规则来探讨一下,当 clientlinux 要直接连线到 workstation 时,他的连线方向是这样的 (参考图 8.2-1):
连线发起: clientlinux --> Linux Router (OK) --> workstation (OK)
回应连线: workstation (连线目标为 192.168.100.10,因为并没有该路由规则,因此连线丢给 default gateway,亦即是 Router A) --> Router A (OK) --> Linux Router (OK) --> clientlinux
有没有发现一个很可爱的传输流程?连线发起是没有问题啦,不过呢,回应连线竟然会偷偷透过 Router A 来帮忙呦! 这是因为 workstation 与当初的 Router A 一样,并不知道 192.168.100.0/24 在 192.168.1.100 里面啦!不过,反正 Router A 已经知道了该网域在 Linux Router 内,所以,该封包还是可以顺利的回到 clientlinux 就是了。
让 workstation 与 clientlinux 不透过 Router A 的沟通方式
如果你不想要让 workstation 得要透过 Router A 才能够连线到 clientlinux 的话,那么就得要与 Router A 相同,增加那一条路由规则咯!如果是 Linux 的系统,那么如同 Router A 一样的设定如下:
[root@workstation ~]# vim /etc/sysconfig/network-scripts/route-eth0
192.168.100.0/24 via 192.168.1.100 dev eth0
[root@workstation ~]# /etc/init.d/network restart
[root@www ~]# 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
192.168.100.0 192.168.1.100 255.255.255.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
最后只要 clientlinux 使用 ping 可以连到 workstation,同样的,workstation 也可以 ping 到 clientlinux 的话,就表示你的设定是 OK 的啦!搞定!而透过这样的设定方式,你也可以发现到一件事,那就是:『路由是双向的,你必须要了解出去的路由与回来时的规则』。 举例来说,在预设的情况下 (Router A 与 workstation 都没有额外的路由设定时),其实封包是可以由 clientlinux 连线到 workstation 的,但是 workstation 却没有相关的路由可以回应到 clientlinux ~所以上头才会要你在 Router A 或者是 workstation 上面设定额外的路由规则啊!这样说,了解了吧? ^_^
用 Linux 作一个静态路由的 Router 很简单吧!以上面的案例来说,你在 Linux Router 上面几乎没有作什么额外的工作,只要将网路 IP 与网路介面对应好启动,然后加上 IP Forward 的功能, 让你的 Linux 核心支援封包转递,然后其他的工作咱们的 Linux kernel 就主动帮你搞定了!真是好简单!
不过这里必须要提醒的是,如果你的 Linux Router 有设定防火墙的话, 而且还有设定类似 NAT 主机的 IP 伪装技术,那可得特别留意,因为还可能会造成路由误判的问题~