从一个ISP移至另一个ISP而不改变IP的方案
某客户从一个ISP_A移到了另一个ISP_B。但是,其WEB服务器由于之前对外公布的是IP地址,且无DNS,因此,要求该服务器搬至ISP_B后,用户依然可以访问原来的IP地址,求方案。
假设:ISP_A与ISP_B的两台路由器都可控;原服务器的地址为2.2.2.2/24
原理:在ISP_A(R2)与ISP_B(R1)两台路由器之间做一个GRE的tunnel。当用户访问服务器时,到达ISP_A路由器,在这里,做一条至服务器2.2.2.2的主机路由,指向tunnel的另一端(ISP_B)。数据包通过tunnel到达ISP_B,本机有2.2.2.0段的直连路由,数据包到达2.2.2.2。服务器响应,数据包发送至默认网关ISP_B, 此时数据包就从ISP_B出去了,也就是说数据包来回走的路是不一样的,这样就少了一层GRE封装,理论上讲效率会高。如果想来回都走ISP_A路由,则需要在ISP_B路由器连接服务器的那个端口上启用PBR,将所有源地址是2.2.2.2的包,都指向ISP_A的tunnel上去。
该方案看似复杂,实际实现非常简单,而且是在IP路由层面实现,不挑设备。
实现该功能最简单的办法是NAT就更好了,但目前想不出NAT(在一个端口上实现inside,outside)的实现方法。
测试:
采用dynamips 0.2.8 for linux完成测试(CentOS 6.5, 0.2.8版本总是找libpcap0.9.4库,即使安装上该库). 拓扑图如下。

测试用命令:
R9:
dynamips --idle-pc=0x606d0ef0 -P 7200 -p 1:PA-4E unzip-c7200-is-mz.122-37.bin \
-i 9 \
-s 1:1:udp:13321:127.0.0.1:13322 \
-s 1:2:udp:13311:127.0.0.1:13312
#e1/1 to R2 e1/1 #e1/2 to R1 e1/1
R2:
dynamips --idle-pc=0x606d0ef0 -P 7200 -p 1:PA-4E unzip-c7200-is-mz.122-37.bin \
-i 2 \
-s 1:1:udp:13322:127.0.0.1:13321 \
-s 1:2:udp:22221:127.0.0.1:22222
#to R9 #to R22
R22:
dynamips --idle-pc=0x606d0ef0 -P 7200 -p 1:PA-4E unzip-c7200-is-mz.122-37.bin \
-i 22 \
-s 1:1:udp:22222:127.0.0.1:22221
R1:
dynamips --idle-pc=0x606d0ef0 -P 7200 -p 1:PA-4E unzip-c7200-is-mz.122-37.bin \
-i 1 \
-s 1:1:udp:13312:127.0.0.1:13311 \
-s 1:2:udp:12221:127.0.0.1:12222
#to R9 #to R22
R11:
dynamips --idle-pc=0x606d0ef0 -P 7200 -p 1:PA-4E unzip-c7200-is-mz.122-37.bin \
-i 11 \
-s 1:1:udp:12222:127.0.0.1:12221
配置:
R9:
interface Loopback0
ip address 9.9.9.9 255.255.255.255
!
interface Ethernet1/1
ip address 3.3.2.1 255.255.255.0
duplex half
!
interface Ethernet1/2
ip address 3.3.1.1 255.255.255.0
duplex half
!
ip route 2.2.2.0 255.255.255.0 3.3.2.2
R1:===========
interface Tunnel0
ip address 192.168.1.1 255.255.255.0
tunnel source 3.3.1.2
tunnel destination 3.3.2.2
!
interface Ethernet1/1
ip address 3.3.1.2 255.255.255.0
duplex half
!
interface Ethernet1/2
ip address 2.2.2.1 255.255.255.0
duplex half
!
ip route 0.0.0.0 0.0.0.0 3.3.1.1
R2:===========
interface Tunnel0
ip address 192.168.1.2 255.255.255.0
tunnel source 3.3.2.2
tunnel destination 3.3.1.2
!
interface Ethernet1/1
ip address 3.3.2.2 255.255.255.0
duplex half
!
interface Ethernet1/2
ip address 2.2.2.1 255.255.255.0
duplex half
!
ip route 0.0.0.0 0.0.0.0 3.3.2.1
ip route 2.2.2.2 255.255.255.255 Tunnel0
R11:=============
interface Ethernet1/1
ip address 2.2.2.2 255.255.255.0
ip route 0.0.0.0 0.0.0.0 2.2.2.1
line vty 0 4
password 123
login
!
end
R22:=============
interface Ethernet1/1
ip address 2.2.2.3 255.255.255.0
duplex half
!
ip route 0.0.0.0 0.0.0.0 2.2.2.1
从一个ISP移至另一个ISP而不改变IP的方案的更多相关文章
- js移除最后一个字符,js替换字符串的连接符号,js移除最后一个分隔符号
js移除最后一个字符 js移除最后一个分隔符号 js替换字符串的连接符号 >>>>>>>>>>>>>>>> ...
- 下拉框——把一个select框中选中内容移到另一个select框中遇到的问题
在使用jQuery实现把一个select框中选中内容移到另一个select框中功能时遇到了一个问题,就是点击按钮时内容可以到另一个select框中,但是到了另一个select框中的内容却很快闪退回原来 ...
- cxgrid回车移到下一个单元格
cxgrid回车移到下一个单元格 cxgrid回车移到下一个单元格 作用:表格式录入全键盘操作. 设置cxgrid1Dbtableview1.optionsBehavior.goToNextCel ...
- SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组
SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组 之前写过一篇文章:SQLSERVER将一个文件组的数据移动到另一个文件组 每个物理文件(数据文件)对应一个文件组的情况(一对一) 如 ...
- 自定义Jquery插件——由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件
由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件下面是代码: // 掉用方式支持 $('select').textBeauty(1 ...
- jq移除最后一个class的值
$(".his_pg_jl li").on("click",function() {//挂一个点击事件 $(this).addClass('back_img') ...
- jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性
select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function ...
- pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值.
- Java实现点击一个控件实现删除一个控件的方法
最近在做项目的时候需要处理点击一个JLabel实现删除这一个JLabel的功能.最近折磨了一点时间,查了一下API.找到2个方法可以实现这个功能. remove public void remove( ...
随机推荐
- CPlus的简单线程的制作
1.线程需要用到<widnows.h> 2.利用句柄创建并执行线程: HANDLE hThread = CreateThread(NULL, 0, Fun, &tp, 0, NUL ...
- android IntentFilter 使用之 data过滤
1 Intent分为两大类,显式和隐式. 显式事件,就是指通过 component Name 属性,明确指定了目标组件的事件. 比如我们新建一个Intent,指名道姓的说,此事件用于启动名为" ...
- drop delete truncate 区别
http://jingyan.baidu.com/article/8275fc8693e11846a03cf696.html
- Python快速建站系列-Part.Four-首页内容填充
|版权声明:本文为博主原创文章,未经博主允许不得转载. Part.Three中实现了注册和登录的功能,那这一节完成主页内容的填充,并且主页中要实现简单的可以查找代码的功能. 而且有于公共代码部分存储在 ...
- 原生js快速渲染dom节点
function renderDom(str){ var _div = document.createElement('div'); _div.innerHTML = str; var dom_tem ...
- RCNN--对象检测的又一伟大跨越
最近在实验室和师兄师姐在做有关RCNN的研究,发现这里面坑很深呀,在网上找了一个大牛的博客,准备下来继追OPENCV同时,再来追一个RCNN的学习笔记的博文,博文地址如下:http://blog.cs ...
- 2016年上半年金融类App成绩单,手机银行优势尽显! (转自Analysys易观(ID:enfodesk))
2016已悄然时过大半,金融各领域经过了开年大战,二季度末尾的6月更是几家欢喜几家愁,其中频繁出现的黑马更是足够让人惊喜.我们基于易观千帆6月移动应用大数据,筛选了百款金融类App为您揭晓TOP100 ...
- android权限使用
1.拍照权限使用:
- ClippingNode实现新手引导高亮裁切
ClippingNode的使用 概述 ClippingNode(裁剪节点)可以用来对节点进行裁剪,可以根据一个模板切割图片的节点,生成任何形状的节点显示. ClippingNode是Node的子类,可 ...
- C#使用DataSet Datatable更新数据库的三种实现方法
本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...