从一个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( ...
随机推荐
- ubuntu15.04 安装搜狗输入法
首先:打开 系统设置->软件和更新,添加以下源, deb http://archive.ubuntukylin.com:10006/ubuntukylin trusty main 然后 sudo ...
- mfc ui库
引用:http://blog.csdn.net/weiqubo/article/details/6783717 Xtrme toolkit,BCGControlBar,SkinMagic,AppFac ...
- [转]MySQL5.6新特性之Multi-Range Read
这几天看到mrr的东西,刚好看到以前我们组的一个小伙的博客,我看挺全的,就转过来了,原博客地址请戳 一 介绍 MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range ...
- Python基础第二篇
一.三元运算 if True: name='a' else: name='b' #上面的代码用三元运算表示: name="a" if True else "b" ...
- Java 多线程处理[全]
http://blog.csdn.net/ghsau/article/details/7421217 Java线程(一):线程安全与不安全 http://blog.csdn.net/ghsau/art ...
- IntelliJ IDEA使用(3)——IDEA连接Git
摘要: Intellij IDEA作为最强大智能的IDE,内部已经集成了Git的功能,所以不用安装插件,连接Git@OSC也非常容易 首先安装git for windows 推荐使用这个:http:/ ...
- easyui editor combobox multiple
$.extend($.fn.datagrid.defaults.editors,{ combobox: { init: function(container, options){ var combo ...
- 2016年12月26日 星期一 --出埃及记 Exodus 21:21
2016年12月26日 星期一 --出埃及记 Exodus 21:21 but he is not to be punished if the slave gets up after a day or ...
- PHP 回调、匿名函数和闭包
<?php class Product{ public $name; public $price; function __construct($name, $price){ $this-> ...
- excel如何用公式判断单元格的值是否为数字、英文、中文,以及相应的计数
一.excel如何用公式判断单元格的值是否为数字.英文.中文. A列为数据列,B列为判断列=LOOKUP(CODE(ASC(A1)),{48,65,123;"数字","英 ...