ip_forward与路由转发
⼀、前⾔介绍:
IP地址分为公有ip地址和私有ip地址,Public Address是由INIC(internet network information center)负责的,这些IP地址分配给了注册并向INIC提出申请的组织机构。Private Address属于⾮注册地址,专门为组织内部使⽤。Private Address是不可能直接⽤来跟WAN通信的,要么利⽤帧来通信(FRE帧中继,HDLC,PPP),要么需要路由的转发(nat)功能把私有地址转换为公有地址才⾏。
出于安全考虑,Linux系统默认是禁⽌数据包转发的。所谓转发即当主机拥有多于⼀块的⽹卡时,其中⼀块收到数据包,根据数据包的⽬的ip地址将数据包发往本机另⼀块⽹卡,该⽹卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
⼆、路由转发的⼯作原理:
⾸先内⽹主机向外⽹主机发送数据包,由于内⽹主机与外⽹主机不在同⼀⽹段,所以数据包暂时发往内⽹默认⽹关GIP处理,⽽本⽹段的主机对此数据包不做任何回应。由于内⽹主机的SIP是私有的,禁⽌在公⽹使⽤,所以必须将数据包的SIP修改成公⽹上的可⽤IP,这就是⽹关收到数据包之后⾸先要做的事情--IP地址转换。然后⽹关再把数据包发往外⽹主机。外⽹主机收到数据包之后,只认为这是⽹关发送的请求,并
不知道内⽹主机的存在,更不知道源IP地址是SIP⽽不是FIP,也没必要知道,⽬的主机处理完请求,把回应信息发还给⽹关的FIP。⽹关收到后,将⽬的主机返回的数据包的⽬标IP即FIP修改为发出请求的内⽹主机的IP地址即SIP,并根据路由表将其发给内⽹主机。这就是⽹关的第⼆个⼯作--数据包的路由转发。内⽹主机只要查看数据包的DIP与发送请求的SIP相同,就会回应,这就完成了⼀次请求。
三、配置Linux系统的IP转发功能:
⾸先保证硬件连通,然后打开系统的转发功能:
对于CentOS系统,CentOS 6 和 CentOS 7开启路由转发的⽅式有区别:
1、对于CentOS 6,有三种⽅法:
第⼀种:
[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
第⼆种:
[root@centos6 ~]# vim /f
net.ipv4.ip_forward = 0 //该⾏的0改为1即可
f.default.rp_filter = 1
f.default.accept_source_route = 0
kernel.sysrq = 0
<_uses_pid = 1
p_syncookies = 1
kernel.msgmnb = 65536route add 添加路由
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
[root@centos6 ~]# sysctl -p //查看修改结果.
第三种:
[root@centos6 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@centos6 ~]# //这种⽅法我试过,但修改后没⽣效。以前两种为主吧!
2、对于CentOS7,CentOS 6中的第⼆种⽅法不适⽤,需⽤如下⽅法:
[root@CentOS7 ~]# vim /etc/sysctl.f
...
结尾添加:
net.ipv4.ip_forward = 1
:wq
[root@CentOS7 ~]# sysctl -p
net.ipv4.ip_forward = 1 //查看修改结果.
[root@CentOS7 ~]#
四、配置开启路由转发功能,实现两台不同⽹段的主机实现通信
实验环境:
主机 -- 系统 -- 主机名 -- ip :
内⽹主机 -- CentOS 6.7 -- local_host -- 10.68.7.234
外⽹主机 -- CentOS 6.7 -- pub_host -- 192.168.1.201
⽹关主机 -- CentOS 7.1 -- gateway -- 内⽹ip:10.68.7.107 --外⽹ip:192.168.1.200
相关配置如下:
⾸先开启⽹关服务器的路由转发功能:
[root@gateway ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@gateway ~]#
在内⽹主机配置到内⽹⽹关的默认路由:
[root@local_host ~]# route add default gw 10.68.7.107
在外⽹主机配置到外⽹⽹关的默认路由:
[root@pub_host ~]# route add default gw 192.168.1.200
通过ping测试连通性:
[root@local_host ~]# ping 192.168.1.201
PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data.
64 bytes from 192.168.1.201: icmp_seq=1 ttl=63 time=0.742 ms
64 bytes from 192.168.1.201: icmp_seq=2 ttl=63 time=1.38 ms
64 bytes from 192.168.1.201: icmp_seq=3 ttl=63 time=2.64 ms
64 bytes from 192.168.1.201: icmp_seq=4 ttl=63 time=2.06 ms
...
[root@pub_host ~]# ping 10.68.7.234
PING 10.68.7.234 (10.68.7.234) 56(84) bytes of data.
64 bytes from 10.68.7.234: icmp_seq=1 ttl=63 time=0.568 ms
64 bytes from 10.68.7.234: icmp_seq=2 ttl=63 time=1.49 ms
64 bytes from 10.68.7.234: icmp_seq=3 ttl=63 time=3.48 ms
64 bytes from 10.68.7.234: icmp_seq=4 ttl=63 time=3.65 ms
64 bytes from 10.68.7.234: icmp_seq=5 ttl=63 time=2.20 ms
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论