应用场景:

客户端(client)与服务器A在同一个运营商网络,应用部署在服务器B,服务器A 、B之间建立tunnel,A设置dnat,client通过访问A的8000端口来访问服务器B,B返回的响应通过tunnel到达A,A再返回给client。在dnat之上使用tunnel的原因是通过tunnel后,B接收到的请求源IP为client,而不是A。

client -----》 A 《=======tunnel=======》B

ip:192.168.1.1                                  ip:192.168.2.2

tunnel_ip:10.111.111.1                     tunnel_ip:10.111.111.2

在A(linux) 搭建 gre tunnel过程:

1、创建gre tunnel:

/sbin/modprobe ip_gre

/sbin/iptunnel add tun0 mode gre remote 192.168.2.2 local 192.168.1.1

/sbin/ifconfig tun0 10.111.111.1

/sbin/route add 10.111.111.2 tun0

2、设置iptables规则:

#这个规则很重要,某些特殊的网络会影响mtu的协商,所以要用这个规则来指写mtu

/sbin/iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#到apache端口的映射

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 10.111.111.2:8000 

#SNAT规则

/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp -j SNAT --to-source 192.168.1.1 

当B是bsd时,在B搭建 gre tunnel过程:

1、BSD 6.2的默认内核不支持ipfw的forward功能,需要重编一下kernel。找一个默认的SMP配置文件,在最后加上

options IPFIREWALL

options IPDIVERT

options IPFIREWALL_DEFAULT_TO_ACCEPT

options IPFIREWALL_VERBOSE

options IPFIREWALL_VERBOSE_LIMIT=10

options IPFIREWALL_FORWARD

options DUMMYNET

编译内核重启(或者直接找一个编译好的来用)

2、做一个到napt服务器的tunnel。在BSD 4.x下,ipip tunnel工作良好,但在6.2下会有一些古怪的问题,小包通讯正常,大包就无法通过,因此要改用gre tunnel。通过下面的命令来创建tunnel,同时可以把这些命令写到/etc/rc.local,服务器启动的时候自动创建:

/sbin/ifconfig gre0 create

/sbin/ifconfig gre0 tunnel 192.168.2.2 192.168.1.1

/sbin/ifconfig gre0 10.111.111.2/32 10.111.111.1  

3、做转发规则。实现类似linux下ip route的功能,将从10.111.111.2发出的包,都转发给tunnel另一端的napt服务器。

/sbin/ipfw add 100 fwd 10.111.111.1 ip from 10.111.111.2 to any

也可以使用ipf来实现源地址路由的功能(不用重新编译内核)

1、创建tunnel跟上面的第2步一样

2、在ipf的rule文件添加规则:

pass out quick on bge0 to gre0:10.111.111.2 from 10.111.111.1 to any

/etc/rc.d/ipfilter restart即可

当B是linux时,在B搭建 gre tunnel过程:

1、装一个iproute的包,修改/etc/iproute2/rt_tables,添加自定义的table

201 mytunnel

2、做一条tunnel,步骤不再重复,假设得到tun0

3、添加ip route规则

#设置mytunnel表的默认路由,都指到tun0 
/sbin/ip route add default dev tun0 table mytunnel mtu 1400 #添加一个规则,让所有从10.111.111.2发出的包都到mytunnel表里面去找路由 /sbin/ip rule add from 10.111.111.2 table mytunnel

gre tunnel搭建的更多相关文章

  1. gre tunnel

    http://searchenterprisewan.techtarget.com/tip/GRE-tunnel-vs-IPsec-tunnel-What-is-the-difference Enca ...

  2. [转]深入理解 GRE tunnel

    我以前写过一篇介绍 tunnel 的文章,只是做了大体的介绍.里面多数 tunnel 是很容易理解的,因为它们多是一对一的,换句话说,是直接从一端到另一端.比如 IPv6 over IPv4 的 tu ...

  3. GRE tunnel 2

    1.GRE简介 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX.ATM.IPv6.AppleTalk等)的数据报文进行封装,使这些被 ...

  4. 深入理解 GRE tunnel

    深入理解 GRE tunnel 时间 2012-11-08 19:05:22  A Geek's Page 原文  http://wangcong.org/blog/archives/2149 主题  ...

  5. Centos7 GRE Tunnel

    一.关闭防火墙及selinux 二.CentOS7默认不加载gre内核模块,加载gre内核模块 # modprobe ip_gre   临时加载gre模块(重启后失效) # lsmod |grep g ...

  6. openstack网络(neutron)模式之GRE的基本原理

    neutron网络目的是为OpenStack云更灵活的划分网络,在多租户的环境下提供给每个租户独立的网络环境. neutron混合实施了第二层的VLAN和第三层的路由服务,它可为支持的网络提供防火墙, ...

  7. 通用路由封装协议——GRE

    一.GRE简介 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX.ATM.IPv6.AppleTalk等)的数据报文进行封装,使这些被 ...

  8. OVS-----CentOS7上搭建基于Open vSwitch的VxLAN隧道实验

    一.关于VXLAN VXLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多. ...

  9. openvSwitch tunnel

    ovs tunnel 实验拓扑 实验拓扑搭建基础脚本 #vbox虚拟机1 ip netns add left ip link add name veth1 type veth peer name sw ...

随机推荐

  1. Centos 右上角面板里没有wired network图标的问题

    开了很多的网页查看解决这个问题,都不是很有效,最后很简单的改了下一个文件就ok了,自己记录下,以免忘记! 打入命令:sudo gedit /etc/NetworkManager/nm-system-s ...

  2. poj 1703 并查集

    题意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 链接: ...

  3. 1.7(SQL学习笔记)游标

    一.游标简介 SELECT语句得到的是一个结果集,有时我们需要对结果集中的单条数据进行处理. 这时就需要使用游标,游标定义时和一个SELECT语句的结果集关联在一起. 游标执行这个结果集,可以在结果集 ...

  4. jdk1.6,jdk1.7和jdk1.8多版本切换

    目录 一.配置jdk1.7(win7系统) 二.jdk1.8切换回jdk1.7 三.最后强调可能出现不成功的原因 首先要明确jdk一般都是默认安装在C:\Program Files\Java下的,在配 ...

  5. Android 基于蓝牙的方向控制器

    最近开发了一个蓝牙控制器App,用手机远程控制小球的运动. 包含了一些基础知识:多线程使用,页面UI数据更新,按钮事件,选择项功能,蓝牙功能(蓝牙打开,蓝牙搜索,蓝牙连接,蓝牙命令发送,蓝牙命令接收) ...

  6. ASIHTTPRequest的环境配置和使用示例

    ASIHTTPRequest类库是基于ISO SDK的一组网络请求的API.IOS SDK的网络组件CFNetwork API操作起来非常复杂.而ASIHTTPRequest类库是对CFNetwork ...

  7. WM-G-MR-09模块

    WM-G-MR-09模块,该模块同时支持SDIO与SPI 模式 USI(环隆电气)WM-G-MR-09,该WiFi芯片支持802.11b/g无线网络模式,芯片体积8.2×8.4×1.35(mm),采用 ...

  8. Tomcat配置域名和虚拟文件夹

    说明: 我在本机中添加域名模拟,假设是主机直接配置也能够使用.我用的tomcat是apache-tomcat-7.0.42 本地添加域名 本文介绍怎样通过改动tomcat的配置.实现通过IP地址或者域 ...

  9. (转)RTMP中FLV流到标准h264、aac的转换

    这段时间,工作上的需要,在RTMP上做了flv流到标准h264.AAC的转换,服务器是开源项目CRTMPSERVER,客户端flex编写,视频编码h264,音频编码AAC,现将一些协议相关的东西记录如 ...

  10. 我的sourceinsight的配置

    下面是我的sourceinsight的配置,点击下面的链接,下载*.em文件,将他们添加到Base工程,设置相应的快捷键即可,或者导入下载的配置文件. http://pan.baidu.com/s/1 ...