转载于:http://blog.csdn.net/quqi99/article/details/7334617

  

假设有这样一个需求,需要从家中访问公司内网机器,可以用ssh遂道技术来作转发,遂道分正向遂道和反向遂道两种,如果数据流向与ssh的顺序(从 ssh client -> ssh server )相同即为正向遂道(用-L标识),如果数据流向与  ssh的顺序相反即为反向遂道。下面直接上两张图来说明:

上面第一张图是正向遂道,数据流向与ssh的顺序(指ssh client -> ssh server)相同,即从192.168.1.1:80处监听到请求数据之后,通过ssh遂道,最后转发给了ssh server端6300端口去处理。

6300:192.168.1.1:80 都是前部分是ssh server, 后端分是ssh client

上面第二张图是反向遂道,数据流向与ssh的顺序(指ssh client -> ssh server)相反,即从ssh server端的6300端口监听到数据之后,通过ssh遂道,最后转给了192.168.1.1:8080

仔细想想上面两张图吧,下面直接上代码,从家中访问公司内网的机器,必须在公司有一台可以从家中访问得到的跳转机(例IP:10.10.10.10),要访问的内网机IP为192.168.1.1 。

1)如果用反向遂道实现的话,先修改ssh server的/etc/ssh/sshd_config中的GatewayPorts  yes, 重启sshd,  /etc/init.d/sshd restart
ssh -R 8422:192.168.1.1:8422 -R 61616:192.168.1.1:61616  root@10.10.10.10 -g -N -C -o TCPKeepAlive=yes

2) 如果用正向遂道的话,先修改ssh server的/etc/ssh/sshd_config中的AllowTcpForwarding true, 重启sshd,  /etc/init.d/sshd restart
    接着要 ssh 登录到跳转机上执行下列命令:
   ssh -L 8422:localhost:8422 -L 61616:localhost:61616  root@9.125.13.30 -g -N -C -o TCPKeepAlive=yes

如果报错“open failed: administratively prohibited: open failed”,那是因为上面的localhost处应该是ssh client的IP

example:

https://9.123.100.152:8422/ibm/console/login.do?action=secure
/etc/ssh/sshd_config中修改GatewayPorts no为GatewayPorts yes  /etc/init.d/sshd restart
ssh -R 8422:9.125.13.30:8422 -R 61616:9.125.13.30:61616 -R 61617:9.125.13.30:61617 root@9.123.100.152 -g -N -C -o TCPKeepAlive=yes

/etc/ssh/sshd_config, AllowTcpForwarding=true
open failed: administratively prohibited: open failed,如果出现这个错误是因为下面的没有用localhost
ssh -L 8422:localhost:8422 -L 61616:localhost:61616 -L 61617:localhost:61617 root@9.125.13.30 -g -N -C -o TCPKeepAlive=yes (需先登录到9.123.100.152这个跳转机上执行)

上述的缺点就是,为每个端口都得开一个tunnel,所以可以通过ssh命令 -D 的参数( [地址:]端口 ),含义是在某个本地地址的某个端口上开SOCKS服务进行监听,把这个端口的数据通信以加密形式转发到ssh的另一端。例如:我们FQ的原理,要防墙必须国外有一台ssh server

1) 首先,通过 ssh -lquqissh -N -D 7070 root@yourForeignSSHhost , 如 s20.flyssh.net

2)在firefox中设置使用socket v5的端口代理,端口为7070 (选项菜单里的“高级”选项卡的“Network"子选项卡中设置Connection)

3)  如何仍然有问题,可在firefox的地址栏输入about:config 配置使用远程DNS:network.proxy.socks_remote_dns=true

上面的FQ有个缺点,就是你访问国内的网站它也会用代理,这样就慢啊,所以你也可用autoproxy插件选择仅在访问某些站点的使用指定代理,哪些不用代理

原理如下:比如firefox现在要访问www.163.com,firefox先将请求数据转给socket代理端口7070, 然后通过ssh遂道,最后由国外的ssh server主机去根据远程的DNS访问www.163.com

但上述需要应用程序支持socket代理,但有的程序不支持怎么办,可以用透明tsocks, 它能让普通程序也走sock代理,在yum install tsocks安装后,修改配置文件/etc/tsocks.conf,可以在样本文件tsocks.conf.sample的基础上修改,通常只要配置server = 127.0.0.1即可,其他都可以默认。例如svn服务,再用ssh -D 1080 -f -N 用户名@公司服务器的公网地址 在本机的1080端口开启SOCKS服务;然后按照你平时使用svn的习惯,只是在命令前加上tsocks,类似这样: tsocks svn up 或者 tsocks svn ci -m 'aaaa' 等等即可。

如果是http代理,用squid,安装后修改配置

sudo vim /etc/squid/squid.conf
http_access allow localnet
http_access allow all

# And finally deny all other access to this proxy
#http_access deny all

# Squid normally listens to port 3128
http_port 21

sudo service squid start

使用时,

1)在shell中,导入http_proxy=http://<httpproxyIP>:21环境变量,然后wget www.g.cn
2)yum源中使用代理,vim /etc/yum.conf
     proxy=http://<httpproxyIP>:21
     然后 sudo yum install git

2014-08-05添加:

要实现ssh自动跳转非常简单,在  ~/.ssh/config

Host server-*
    User ubuntu
    IdentityFile ~/.stack/myssh.key
    ProxyCommand ssh hua@<forward-machine> nc -q0 %h.stack %p

SSHebang就是一个这样自动分发如上配置的工具

vpn技术原理详解的更多相关文章

  1. 新手入门:史上最全Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

  2. Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

  3. 磁盘阵列 RAID 技术原理详解

    RAID一页通整理所有RAID技术.原理并配合相应RAID图解,给所有存储新人提供一个迅速学习.理解RAID技术的网上资源库,本文将持续更新,欢迎大家补充及投稿.中国存储网一如既往为广大存储界朋友提供 ...

  4. Android热修复技术原理详解(最新最全版本)

    本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...

  5. Android热修复技术原理详解

    阿里Dexposed -- native解决方案 原理: 直接在native层进行方法的结构体信息对换,从而实现完美的方法新旧替换,从而实现热修复功能   他的思想完全来源于Xposed框架,完美诠释 ...

  6. 裸眼3D立体显示技术原理详解

    众所周知,现实世界是一个三维空间,除去时间这一维度,现实世界是由长度.宽度和高度三个维度组成,我们每天就生活在这个三维世界中,而现有的显示设备大多数都只能显示二维信息,并不能带给人真实的三维感觉.为了 ...

  7. 新手入门贴:史上最全Web端即时通讯技术原理详解

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  8. 【转】VLAN原理详解

    1.为什么需要VLAN 1.1 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  9. VLAN原理详解[转载] 网桥--交换机---路由器

    来自:http://blog.csdn.net/phunxm/article/details/9498829 一.什么是桥接          桥接工作在OSI网络参考模型的第二层数据链路层,是一种以 ...

随机推荐

  1. Linux操作系统奥秘01-系统引导(MBR - 硬盘的0磁道)

    Boot:1.系统PowerOn 2.BIOS在完成硬件初始化以及POST 3.BIOS加载MBR 4.GRUB->GRUB or kernal MBR MBR即主引导记录,是在BIOS中选择的 ...

  2. MVC4.0 解决Controllers与Areas中控制器不能同名问题

    在使用MVC4.0的时候,难免会遇到在根目录下的Controllers中添加的控制器名称可能会跟在Areas中的某个区域下的控制器名称一样.这个时候访问Areas下面的Controller/Actio ...

  3. Android实例-监测网络状态及一些事件(XE8+小米2)

    结果: 1.网络连接:是指现在可不可以上网(你非要问我什么是网,我会K你呀的). 2.WIFI网络:是指现在可以上网,用的是不是WIFI网络(如果你打开了WIFI那它会显示正在使用WIFI). 3.移 ...

  4. 【最短路】Vijos P1022Victoria的舞会2

    题目链接: https://vijos.org/p/1022 题目大意: 给一张N个点的有向图,求有几块强连通分量.(N<=200) 题目思路: [动态规划] n比较小,可以用floyd暴力把每 ...

  5. python基础(四)

    内置函数 callable() #判断是否能够被调用执行,可以调用返回True,例如函数和类 chr() #将ascii值转换为字符,例如print(chr(65) )输出为a ord()#将字符转换 ...

  6. C# 对文本文件的几种读写方法总结

    计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集.基于Unicode字符集的编码方式有很多,比如UTF-7.UTF ...

  7. MySQL 把两个结果集拼接到一起(两个结果集的列一模一样)

    select * from a UNION all ( select * from b)

  8. scrapy学习笔记之hello world

    1. 创建项目文档 在目标路径下,打开命令行,使用如下命令创建项目,例如项目名称为 "tutorial": scrapy startproject tutorial - 创建项目时 ...

  9. Java的内存 -JVM 内存管理

    一.综述 如果你学过C或者C++,那么你应该感受过它们对内存那种强大的掌控力.但是强大的能力往往需要更强大的控制力才能保证能力不被滥用,如果滥用C/C++的内存管理那么很容易出现指针满天飞的情况,不出 ...

  10. NFV一种提高进程消息高可用性的方法

    1.背景及概述 1.1 背景 在做NFV的过程中,由于控制面进程被放置到不同虚拟机中,中间可能跨越路由器,因此期间网络有可能震荡,这种情况下保证高可用性就必须有保护机制,本文正是在这种背景下的考虑. ...