分类: LINUX
2010-06-10 16:48:13
1 GRE隧道的开启方法
1.首先要先把内核模块ip_gre.o加载上,以前的版本的kernal中的GRE模块都是ip_gre.o,而RHEL5中叫ip_gre.ko
modprobe -l |grep ip_gre.ko
上面这个命令是看看这个模块
insmode /lib/modules/2.4.20-8/kernel/net/ipv4/ip_gre.ko
上面这个命令是加载ip_gre.ko模块
而且注意每次重起或者注销后都要再加载一遍.
2.启动GRE隧道
ip tunnel add 新的tunnel的名称 mode gre remote 对端物理IP local 本端物理IP ttl 255
ip link set 新的tunnel的名称 up
ip addr add 新的tunnel的名称的IP dev 新的tunnel的名称
ip route add 对端的内网私有网段/掩码 dev 新的tunnel的名称
二、实例
让我们先来做一做IPv4隧道:
比如说你有3个网络:内部网A和B,中间网C(比如说:Internet).A网络的情况:
网络地址
10.0.1.0
子网掩码
255.255.255.0
路由器
10.0.1.1
路由器在C网络上的地址是172.16.17.18.我们称之为neta.
B网络的情况:
网络地址
10.0.2.0
子网掩码
255.255.255.0
路由器
10.0.2.1
路由器在C网络上的IP地址是 172.19.20.21.我们称之为netb.
已知C网络已经连通,我们假定它会将所有的数据包从A传到B,反之亦然.
至于原因,我们不考虑.
在A网络的路由器上,输入:
ip tunnel add netb mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255
ip link set netb up
ip addr add 10.0.1.1 dev netb
ip route add 10.0.2.0/24 dev netb
让我们稍微讨论一下.第1行,我们添加了一个隧道设备,并且称之为netb(为了能够表示出这个隧道通向哪里).并且表示要使用GRE协议 (mode gre),对端地址是172.19.20.21(另一端的路由器),我们的隧道数据包发源于172.16.17.18(以便当你的路由器在C网络中拥有多个地址的时候,你可以指定哪一个应用于隧道)并且包的TTL字段应设置为255(ttl 255).
第2行,启用该隧道.
第3行,我们给这个新生的网卡配置了一个IP:10.0.1.1.对于小网络来说足够了,但如果你网络中的隧道多得象无证运营的小煤窑一样,你可能就要考虑给你的隧道规划一个单独的IP地址范围(在本例中,你可以使用10.0.3.0).
第4行,我们为B网络设置了一条路由.注意子网掩码的另一种表示方法.如果你不熟悉这种表示,我就来解释一下:你把你的子网掩码写成二进制形式,数数里面由多少个1.如果你连这个也不会做,不妨就简单地记住:255.0.0.0 就是/8,255.255.0.0 就是 /16, 255.255.255.0 就是 /24.
让我们再看看B网络的路由器.
ip tunnel add neta mode gre remote 172.16.17.18 local 172.19.20.21 ttl 255
ip link set neta up
ip addr add 10.0.2.1 dev neta
ip route add 10.0.1.0/24 dev neta
如果你想从A路由器中停止隧道,输入:
ip link set netb down
ip tunnel del netb
当然,你可以把netb换成neta,在B路由器上操作
例:
rc151.local
iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -d ! 192.168.0.0/16 -o eth1 -j MASQUERADE
start151_gre.sh
#!/bin/bash
modprobe ip_gre
ip tunnel add netHY mode gre remote 60.28.33.42 local 60.28.39.66 ttl 255
ip link set netHY up
ip addr add 192.168.0.2 dev netHY
ip addr add 192.168.1.1 dev netHY
ip route add 192.168.254.0/24 dev netHY
stop151_gre.sh
#!/bin/bash
ip link set netHY down
ip tunnel del netHY
start42_gre.sh
#!/bin/bash
modprobe ip_gre
ip tunnel add netTY mode gre remote 60.28.39.66 local 60.28.33.42 ttl 255
ip link set netTY up
ip addr add 192.168.254.1 dev netTY
ip route add 192.168.1.0/24 dev netTY
ip route add 192.168.0.0/24 dev netTY
stop42_gre.sh
#!/bin/bash
ip link set netTY down