tunnel

tunnel
vpn
Linux有3种隧道。它们是:
IP-in-IP隧道
GRE 隧道
非内核隧道(如PPTP)
GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。在Linux下,你需要ip_gre.o模块
因特网
深圳分公司 --------- 北京分公司
建立tunnel
使用四台虚拟机来模拟实现(不用宿主机模拟,宿主机能和所有网段通)
--下图中172.16.0.0/16网段模拟外网;1.1.1.0/24网段模拟内网1;2.2.2.0/24网段模拟内网2
--(虽然在实际情况下172.16.0.0/16是内网网段,1.1.1.0/24和2.2.2.0/24是外网网段,但我这里只是实验环境模拟)
我下面是用vmware来模拟
172.16.0.0/16为vmnet0网络
1.1.1.0/24为vmnet1网络
2.2.2.0/24为vmnet2网络
(四台虚拟机关闭iptables,selinux,并做时间同步。避免不必要的影响)
  隧道
172.16.2.10 vmnet0 172.16.2.11 vmnet0
外1(深圳VPN) 外2(北京VPN)
1.1.1.128 vmnet1 2.2.2.128 vmnet2
内1 (深圳内网机器) 内2 (北京内网机器)
1.1.1.129 vmnet1 2.2.2.129 vmnet2
网关指向1.1.1.128 网关指向2.2.2.128
VM1 VM2 VM3 VM4
eth1(vmnet2) eth0(vmnet2)
 2.2.2.2 《--》 2.2.2.3
ip_forward  ip_forward
eth0 (vmnet1) eth0(vmnet1) eth1(vmnet3) eth0(vmnet3)
1.1.1.1 --》 1.1.1.2 3.3.3.3 《--  3.3.3.4
--这两个图对比,第二个图是以前讲过的静态路由的做法,需要模拟公网的两个ip互相指网关.但我们今天要做的不是互相指网关,而是这两个模拟公网的ip实现tunnel
做法步骤如下:
先在外1和外2在打开ip_forword
# vim /etc/sysctl.conf --直接加上这一句
net.ipv4.ip_forward = 1
# sysctl -p
建立外1和外2之间的tunnel
1,外1上面操作
# modprobe ip_gre --tunnel协议
# lsmod |grep gre
ip_gre 15341 0
# ip tunnel add tun0 mode gre remote 172.16.2.11 local 172.16.2.10
# ip link set tun0 up --或者使用ifconfig tun0 up
# ip addr add 3.3.3.3 peer 3.3.3.4 dev tun0
# ip route add 2.2.2.0/24 dev tun0 --或者使用route add -net 2.2.2.0/24 dev tun0
--上面这四条的意思:
第一条,增加一个tun0接口,隧道模式为gre,由本端的172.16.2.10和对端的172.16.2.11这个物理连接上建立
第二条,启动tun0这个网卡接口,然后ifconfig命令就可以查看得到
第三条,给本地的tun0授于IP为3.3.3.3,对端为3.3.3.4;完成后ifconfig就能看到tun0的IP(这两个ip是用于tunnel的点对点连接用的,定义的ip只要满足能通迅,并且不和其它网卡路由冲突就行)
第四条,表示当本机数据包要访问2.2.2.0/24这个网段时从tun0出去;完成后route -n可以看到这条路由
2,外2上的操作
# modprobe ip_gre
# lsmod |grep gre
ip_gre 15341 0
# ip tunnel add tun0 mode gre remote 172.16.2.10 local 172.16.2.11
# ip link set tun0 up
# ip addr add 3.3.3.4 peer 3.3.3.3 dev tun0
# ip route add 1.1.1.0/24 dev tun0
3,内1上的操作
把网关指向外1的内网IP
# route add default gw 1.1.1.128
4,内2上的操作
把网关指向外2的内网IP
# route add default gw 2.2.2.128
5,测试,内1和内2两个内网可以互相ping通,并且可以使用traceroute 命令接IP,查看确实走了tunnel
测试完后,删除tunnel的方法 ip tunnel del tun0
--如果做的有问题,可以用ip tunnel del tun0命令删除后,重新,再写上面的四条
扩展:
上面架构做好后,深圳内网用户1.1.1.129ping不通172.16.2.11(北京vpn外网IP),但反过来(就是北京vpn可以ping通深圳内网用户)却可以ping通
posted @ 2018-06-19 22:06  Sky-wings  阅读(837)  评论(0编辑  收藏  举报