首页 > 代码库 > Linux主机实现简单的路由转发功能

Linux主机实现简单的路由转发功能

只要在Linux主机上添加一些简单的路由条目, 这些Linux主机就可以充当简单路由器的功能。

在实际生产坏境中, 当我们需要一台路由器简单作为转发数据, 但是手上却没有路由器的话, 我们就可以指定一台Linux主机充当一个简单的路由器,实现路由简单的转发。

上面所诉尤其强调简单, 所以说只是实现简单的路由的功能, 如果要实现非常复杂的功能的话, 一台Linux主机可能无法实现你想要的条件。

 

实验坏境: 基于VMware上的4台虚拟主机,主机名为R1R2的两台主机(都是centos6.8系统)充当路由器, 而主机名Centos7.2(1)Centos7.2(2)两台主机作为测试主机。

 

下面是实验拓扑图:

技术分享

下面是实验步骤:


1>. 防火墙会影响路由转发功能, 首先清空R1R2两台主机上的防火墙规则。

[root@R1 ~]# iptables -F
[root@R2 ~]# iptables -F


2> Linux系统,默认路由转发功能是关闭的,我们需要修改配置文件,去将路由转发功能打开。

路由转发的配置文件/proc/sys/net/ipv4/ip_forward

查看和设置R1上的/proc/sys/net/ipv4/ip_forward

[root@R2 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@R2 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@R2 ~]# cat /proc/sys/net/ipv4/ip_forward
1


查看和设置R2上的/proc/sys/net/ipv4/ip_forward

[root@R1 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@R1 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@R1 ~]# cat /proc/sys/net/ipv4/ip_forward
1


3>. R1主机eth0eth1接口配置ip地址

[root@R1 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:B3:32:CC
TYPE=Ethernet
UUID=a7f94e4f-1f87-439f-a044-9888cc8ddc7c
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=10.0.0.2
PREFIX=8
[root@R1 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=none
BOOTPROTO=static
IPADDR=172.16.0.1
PREFIX=16


4>.R2主机eth1eth2接口配置ip地址

[root@R2 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.0.2
PREFIX=16
[root@R2 network-scripts]# cat ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
IPADDR=192.168.1.1
NETMASK=255.255.255.0


5>. 临时指定主机Centos7.2(1)Centos7.2(2)ip地址。

临时指定Centos7.2(1)eno16777736ip地址:

[root@centos7 sysconfig]# ifconfig eno16777736 10.0.0.1


临时指定Centos7.2(2)eno16777736ip地址:

[root@centos7 ~]# ifconfig eno16777736 192.168.1.2


 

6>. ip地址已经都配置好了,现在要在路由器上添加一些路由规则,也需要给测试主机添加网关配置。

a>. 在R1主机上添加通往192.168.1.0网段的路由条目

[root@R1 network-scripts]# route add -net 192.168.1.0/24 gw 172.16.0.2 dev eth1


 

    查看主机R1的路由条目:

[root@R1 network-scripts]# ip route
192.168.96.0/24 dev eth2  proto kernel  scope link  src 192.168.96.137  metric 1 
192.168.1.0/24 via 172.16.0.2 dev eth1 
172.16.0.0/16 dev eth1  proto kernel  scope link  src 172.16.0.1  metric 1 
169.254.0.0/16 dev eth0  scope link  metric 1002 
10.0.0.0/8 dev eth0  proto kernel  scope link  src 10.0.0.2


 

b>. 在R2主机上添加通往192.168.1.0网段的路由条目

[root@R2 network-scripts]# route add -net 10.0.0.0/8 gw 172.16.0.1 dev eth1


   查看主机R2的路由条目:

[root@R2 network-scripts]# ip route
192.168.96.0/24 dev eth3  proto kernel  scope link  src 192.168.96.139  metric 1 
192.168.1.0/24 dev eth2  proto kernel  scope link  src 192.168.1.1  metric 1 
172.16.0.0/16 dev eth1  proto kernel  scope link  src 172.16.0.2  metric 1 
10.0.0.0/8 via 172.16.0.1 dev eth1


 

c>. 给测试两台主机centos7.2(1)centos7.2(2)添加指定网关

[root@centos7 sysconfig]# route add -net default gw 10.0.0.2
[root@centos7 ~]# route add -net default gw 192.168.1.1


7>. 测试:

centos7.2(1 ) ping centos7.2(2)的主机:

[root@centos7 sysconfig]# ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=62 time=16.2 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=62 time=1.02 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=62 time=1.39 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=62 time=1.06 ms
....


很显然, 两台主机之间是互相通的了。

Linux主机实现简单的路由转发功能