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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux主机实现简单的路由转发功能相关的知识,希望对你有一定的参考价值。

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

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

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

 

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

 

下面是实验拓扑图:

技术分享

下面是实验步骤:


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

[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -F


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

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

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

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0
[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1


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

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0
[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1


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

[[email protected] 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
[[email protected] 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地址

[[email protected] network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.0.2
PREFIX=16
[[email protected] 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地址:

[[email protected] sysconfig]# ifconfig eno16777736 10.0.0.1


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

[[email protected] ~]# ifconfig eno16777736 192.168.1.2


 

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

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

[[email protected] network-scripts]# route add -net 192.168.1.0/24 gw 172.16.0.2 dev eth1


 

    查看主机R1的路由条目:

[[email protected] 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网段的路由条目

[[email protected] network-scripts]# route add -net 10.0.0.0/8 gw 172.16.0.1 dev eth1


   查看主机R2的路由条目:

[[email protected] 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)添加指定网关

[[email protected] sysconfig]# route add -net default gw 10.0.0.2
[[email protected] ~]# route add -net default gw 192.168.1.1


7>. 测试:

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

[[email protected] 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主机实现简单的路由转发功能的主要内容,如果未能解决你的问题,请参考以下文章

linux做路由并实现路由转发

Linux ip_forward 数据包转发

Linux路由转发+多网卡配置(route命令)

linux网络配置相关杂项

路由转发小实验

ip路由原理