找回密码
 立即注册
查看: 12935|回复: 0

linux利用ipip或gre建立tunnel(隧道)

[复制链接]
发表于 2013-4-20 15:06:58 | 显示全部楼层 |阅读模式
    搞tunnel都还是在bell的时候的事了,今天本来是想温习下的,没想到忘记的一干二级!!!惭愧惭愧.
      linux 支持的 tunnel 有 ipip gre sit 其他非内核隧道这几种。
    ipip 需要内核模块 ipip.ko 下面的描述说出了ipip的特点。
    简单之极!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据我所知,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。需要它的时候尽管使用,否则就使用GRE。
    GRE  需要内核模块 ip_gre.ko
    GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。
    还有一个 sit 我也不知道这个该不该算在隧道里面,他的作用是连接 ipv4 与 ipv6 的网络,这里也我也把他当作隧道的一种吧。
    以上所有隧道都需要内核模块 tunnel4.ko 的支持。
    在内核之外,还有很多实现隧道的方法,最闻名的当然要数PPP和PPTP,但实际上还有很多(有些是专有的,有些是安全的,有些甚至根本不用IP。
    很多人都把隧道描写成一个专用的管子,我觉得这容易造成理解上的误区,当然你看到的结果的确像在一个专用的管子里那样通讯,我更喜欢把隧道看成一个装在大信封里面的一个小信封和一封信。因为不管理论如何,你的数据包还是要实实在在的,通过现有的网络、路由,一步一步的传送过去,这个是不可能省略掉的。
    说了这么多,现在就开始从最基本的 ipip 来手工建立一个隧道。
    环境:两台linux服务器,分别在两地。并且两台机器都有实ip与互联网向链接,能够互相通讯。每台机器后面都有带着一个LAN 。
    图1
    -------------------------------------INTERNET------------------------------------
    | 192.168.100.0/24 | 211.167.237.218  123.127.177.195 |192.168.200.0/24 |
    |-     -     -     -                |         |               -    -     -     -|
    |      eth0        |       eth1     |         |    eth1       |      eth0       |
    ---------------------------------------------------------------------------------
    结构就是这个样子,现在我们就依据上面的结构来建立 tunnel 。
    在 211.167.237.218 上创建:
    modprobe ipip
    ip tunnel add tun1 mode ipip remote 123.127.177.195 local 211.167.237.218 ttl 64
    ip link set tun1 mtu 1480 up
    ip address add 192.168.200.253 brd 255.255.255.255 peer 123.127.177.195 dev tun1
    ip route add 192.168.200.0/24 via 192.168.200.253
    在 123.127.177.195 上创建:
    modprobe ipip
    ip tunnel add tun1 mode ipip remote 211.167.237.218 local 123.127.177.195 ttl 64
    ip link set tun1 mtu 1480 up
    ip address add 192.168.100.253 brd 255.255.255.255 peer 211.167.237.218 dev tun1
    ip route add 192.168.100.0/24 via 192.168.100.253
    上面的命令里出现了几个关键字,需要我们注意的地方:
    1、mtu隧道会增加协议开销,因为它需要一个额外的IP包头。一般应该是每个包增加20个字节,所以如果一个网络的MTU是1500字节的话,使用隧道技术后,实际的IP包长度最长只能有1480字节了。这倒不是什么原则性的问题,但如果你想使用隧道技术构建一个比较大规模的网络的话,最好仔细研究一下关于IP包的分片和汇聚的知识。
    2、ttl 数据包的生存期。设置为64是安全的。如果你的网络规模巨大就提高这个值。不要因为好玩而这么做,那样会产生有害的路由环路。实际上,在很多情况下你要考虑能否减小这个值。
    3、ip 要写对端的内网ip,因为这可以减少vpn服务器不是默认网关的麻烦。对方看到的数据包实际是你本地绑定在 tun1 上的ip地址。
    4、设置路由后就可以通讯了。
    5、这样你已经可以和 你拨入的机器的内网卡通讯了,为了让你拨入方的其他机器也可以和你通讯,你需要增加一个 arp 的响应机制及打开ip转发功能。
    arp -Ds source_ip -i lan_eth pub
    sysctl -w net.ipv4.ip_forward=1
    让你的内网卡可以响应这个ip的arp回应。
    到此为止,一简单的 ip tunnel 已经完成了。当然如果你不想使用 ipip 你更喜欢gre 那你可以在开头简单的改成
    moprobe ip_gre
    ip tunnel add tun1 mode gre ... ...
    来实现,而后面的参数基本上不需要改变。
    上面是一个简单的没有任何加密的隧道建立过程,这样通讯可能会带来安全隐患,毕竟我们访问的是内网吗。
    要搞隧道加密就搞ipsec吧,没玩过,ipsec 是一个复杂的东西.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2024-5-3 12:57 , Processed in 0.068104 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表