【网络】公司内网(私网)通过公网作代理连接出去,实现远程登录

还要实现端口转发:

 

这篇非常好

怎样从外网访问内网服务器

原文:http://www.cnblogs.com/devymex/p/4156378.html

★★★★FBI WARNING★★★★

以下操作相当于给内网的防火墙上开了个洞,会给整个内网带来极其严重的安全隐患!

为避免产生法律问题,请在操作前务必向网络管理员咨询您的操作权限!

★★★★★★★★★★★★★★★


《基于VPS服务器的内网代理转发方案》

前言

假设我们在内网有一个自己的电脑A(运行Win7),希望在外网家中用另一台电脑B(运行Win7)访问内网资源,或伪装为内网电脑访问外网资源。


由于内网电脑没有公网IP,所以外网电脑无法直接向内网电脑发起连接。为实现我们的目标,需要从内网电脑主动向一个公网服务器发起一个连接,外网电脑通过这个服务器使用这一连接,再通过内网电脑进行访问。

现在已有许多商业内网代理服务器可以实现此功能,比如花生壳、步轻云、TeamView、GoToMyCloud等等。但天下没有免费的午餐,要使用第三方的公网服务器就必须为第三方付费,并且这些服务器都有各种各样的限制。此外,由于数据包会流经第三方,因此对数据安全也是一大隐患

 

随着个人VPS服务器的普及,越来越多的朋友想用自己的VPS服务器作为内网代理,这样既安全又免费。本套方案实现了这一目标,并具有以下无可替代的优势:

  • 在已有VPS服务器的基础上,完全免费;
  • 用到的所有工具软件皆为开源软件;
  • 不经过任何第三方服务器,保证数据安全;
  • 外网电脑可以伪装成内网电脑,具有最高访问权限。

如果您的方案在满足上面四个条件的基础上,比我的方案更简单,敬请指教!下文将对配置方案作详细的介绍。



先决条件

1. A机上可访问外网并且可以安装虚拟机。

2. 拥有一个外网的VPS服务器S(运行Debian 7.x)。推荐购买BandWagon的廉价VPS服务器(),一年100多元。



一、建立从内网机到外网服务器的反向隧道

1.1. 在A机上用虚拟机运行Ubuntu Server。首先安装VirtualBox虚拟机。

下载VirtualBox:

最新版的VirtualBox不用配置网络即可从本地可用的网络连接上网。

下载Ubuntu Server:

在VirtualBox中安装Ubuntu Server,全部默认设置即可。

 

1.2. 由A机发起,建立从A到S的反向隧道连接,命令格式:

ssh -C -R <NPORT>:localhost:22 -p <RPORT> <SUSER>@<S_IP>
  • -C:允许数据压缩;
  • NPORT :指定在S机上进行侦听的端口。在S机上发往"localhost:NPORT"的数据包都将被直接转发到A机的22端口(SSH默认服务端口);
  • RPORT:S机的SSH服务端口;
  • SUSER:登录S机的用户名,一般为root;
  • S_IP:S机的公网IP。

执行此命令后,可能需要输入SUSER在S机的密码。反向隧道连接建立成功以后,即远程登录到S,接下来的操作都是将在S上执行。命令举例:

ssh -C -R 876:localhost:22 -p 26131 root@14.12.83.20

 

1.3. 建立从S到A的SSH动态转发,可视为从S到A的SOCKS代理服务,命令格式:

ssh -C -f -N -D <SPORT> -p <NPORT> <LUSER>@localhost
  • -f -N:后台连接而不登录到主机,也不执行任何脚本;
  • SPORT:指定S机上SOCKS代理服务进行侦听的端口;
  • NPORT:S机上侦听的反向隧道端口,在第1.2步指定;
  • LUSER:登录A机的用户名。

执行此命令后,可能需要输入LUSER在A机的密码。至此,我们已将A作为S的SOCKS代理服务器。命令举例:

ssh -C -f -N -D 1080 -p 876 devymex@localhost

 

1.4. 用curl命令测试连接,命令格式:

curl --socks4 localhost:<SPORT> <URL>
  • SPORT:S机上SOCKS代理服务进行侦听的端口,在1.3步指定;
  • URL:任意网址,可指定内网资源。

此命令若执行成功,URL所指向的内容会打印在屏幕上。一般以简短的HTML页面为佳,太大的资源会很慢。命令举例:

curl --socks4 localhost:1080 www.baidu.com

如果未安装curl,需先安装:

apt-get install curl

若未找到curl包,需先更新apt-get:

apt-get update



二、在服务器端用DeleGate实现二级HTTP代理

接下来要将SOCKS代理转换为HTTP代理,使用的软件是DeleGate。这是一个开源软件,但目前并不被apt-get、rpm和yum支持,因此必须先下载编译。

2.1.如果没有g++需要先安装g++,命令:

apt-get install g++

 

2.2. 下载和解压DeleGate(http://www.delegate.org/),命令:

cd ~
wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.9.13.tar.gz
tar -xzf delegate9.9.13.tar.gz
  • wget:下载源码包到/home目录下,当然其它具有运行程序权限的目录亦可;
  • tar -xzf:/home/delegate9.9.13子目录并解压缩到此目录中。

注意,如果DeleGate发布了新版本,上面给出的下载链接和目录名可能不同,请关注DeleGate官方网站。

2.3. 编译DeleGate,命令:

cd ~/delegate9.9.13
make

make命令必须在DeleGate解压后的目录中执行。如果未安装make,需先安装:

apt-get install make

make执行的过程较慢,其间会提示输入电子邮箱,任意输入,然后按Y即可。

 

2.4. 启动DeleGate,命令格式:

src/delegated -P<HPORT> SERVER=http SOCKS=localhost:<SPORT>
  • HPORT:指定S机上HTTP代理服务进行侦听的端口;
  • SPORT:S机上SOCKS代理服务进行侦听的端口,在1.3步指定。

命令举例:

delegated -P8118 SERVER=http SOCKS=localhost:1080

 

2.5. 用curl命令测试连接,命令格式:

curl -x localhost:<HPORT> <URL>
  • HPORT:S机上HTTP代理服务进行侦听的端口,在2.4步指定。
  • URL:任意网址,可指定内网资源。

命令举例:

curl -x localhost:8118 www.baidu.com



三、在服务器端建立端口转发

现在S机上已经有本地的HTTP代理了,接下来要将

3.1 如有必要,先清除已有nat规则,命令:

iptables -t nat -F

iptables是一个非常强大的防火墙/路由程序,用法也比较复杂,具体可参考相关文档,此处不做赘述。

3.2 建立http协议的端口转发,命令格式:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports <HPORT>
  • HPORT:S机上HTTP代理服务进行侦听的端口,在2.4步指定。

命令执行后,由S机发出的HTTP请求(80端口)都将被转发到HPORT端口上。

命令举例:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8118

 

3.3. 用curl命令测试连接,命令格式:

curl <URL>
  • URL:任意网址,可指定内网资源。

命令举例:

curl www.baidu.com



四、在外网机通过SSH隧道连接到外网服务器

1. 在B机安装Bitvise SSH客户端软件

 

2. 配置Bitvise SSH客户端的Login页

Host:S机的服务器IP;Port:SSH服务端口;Username:登录用户名;Initial method:password;Password:登录密码。

 

3. 配置Bitvise SSH客户端的Services页

SOCKS/HTTP Proxy Forwarding:Enabled;Listen interface:127.0.0.1;Listen port:1080。

 

4. 在B机安装Privoxy。

下载地址:

 

5. 配置Privoxy目录下的config.txt文件,并运行Privoxy:

listen-address  0.0.0.0:1984
forward-socks5   /  127.0.0.1:1080 .

 

6. B机上的任意程序,以localhost:1984为HTTP代理,即可通过A机访问内网资源。



备注

1. kill掉delegate进程即可终止S机上的HTTP代理服务,删除delegate的目录即可完全卸载DeleGate。

 

2. 执行如下命令可取消80端口数据包的转发:

iptables -t nat -F

 

3. 断开从A机到S机的连接,即可终止S机上的SOCKS代理服务。

 

4. 查看侦听指定端口的进程ID,命令格式:

fuser -un tcp <PORT>


5. B机上建议使用Firefox+AutoProxy进行访问。
AutoProxy下载地址:

自己猜想的

公司内网 是私有网段,要在家remote是连接不上的。
只有找一台公网的机器,网段是外网的做代理才行。
正好我们有Azure服务器(云服务器)是公网的。公司内网ssh(bitvise ssh client/server 或者putty) 连接Azure通过Azure ping到自己家里的电脑。虽然公司电脑的端口都被限制了,远程连接端口是3389,所以其他电脑是连不上我们的远程服务功能的。但是我们的电脑主动连接其他开了此端口的电脑比如Azure,这样双方就建立了通信
最后就是 公司电脑 --> Azure:3389(或者自己定义好一个远程连接的端口) --> 家里电脑:3389(或者自己定义好一个远程连接的端口,因为默认是不开的,怕被黑客侵入)

 

代理服务

http://www.cnblogs.com/ambon/articles/5632000.html 

 

0.有3种方法

  1. 直接修改本地IP为可以上网的IP。

  2. 使用代理上网

  3. 网络管理员

 1.使用代理上网 适合内网(私网)情况下

首先在局域网中必须有一台能够访问公网的计算机。

然后把那台做成代理服务器,通过那台访问公网,不然死也上不去。如果有这样的机器 用 ccproxy这个软件可以把那台机器做成代理服务器。

2.

这个要把你公司电脑的ip地址映射到你公司外网ip地址上才行,要在公司那边改的,跟家里没多大关系(因为你连的是公司的电脑), 这个就需要你公司的网络管理员配合在路由器里做端口映射了!!!


3.局域网内有两台电脑 都开放了3389端口,那么问题来了 =.= 如果在外网 用远程桌面链接 会发生什么 0.0 求解

连不上任何电脑!只有把内网的某一个端口指定到公网IP的某一端口才可以(端口映射),两台机器的话公网可以使用不同的端口就可以了,如一台使用8888,另一台使用9999,都转换到内网这2台 不同主机的3389端口就可以分别连接两台主机了。(但是问题是现在两台电脑的端口都关闭的,能连吗)

4.
实现两台计算机互相通信,要使用到 socket 编程,只要在创建套接字的时候绑定本机IP和端口,然后再通过对方计算机的ip就可以实现通信。
这里通信 设计到 使用UDP 还是 TCP 。
UDP是面向通信的,效率较高,但不安全。常用在局域网通信。
TCP是面向连接的,效率不高,安全,比较常用在广域网通信。



和我的状况很类似:
http://www.open-open.com/lib/view/open1434007270286.html

ssh 反向代理 外网访问内网

ssh   2015-06-12 11:49:40 发布
您的评价:
     
0.0  
收藏     0收藏
先明确一下概念
  外网是有固定ip的机器,ssh可以之间连接上;
  内网是类似公司局域网之类,有独立ip但是不能ssh,需要管理员做端口转发等等权限性操作才可以。
 
文中用内网表示需要被访问的局域网内电脑,用外网表示局域网外电脑。
 
# 一、首先,查看外网现有的ssh端口开放情况。
[zhipeng@zhangzhipeng2023.cn ~]$sudo netstat -anopl | grep ssh
[sudo] password for zhipeng:
tcp     0    0 0.0.0.0:22        0.0.0.0:*        LISTEN    22645/sshd      off (0.00/0/0)
 
-------------------------------------------------------------------
 
内网ssh连接外网:
ssh -C -R (vpsPort ):(vpsHostname ): (mySSHPort )-p(vpsSSHPort )(vpsUser )@(vpsIP 
参数说明: 
-C 数据压缩;
-R vpsPort 要绑定的外网端口;
vpsHostname 给外网设置主机名;
mySSHPort 内网ssh服务的端口。
-p vpsSSHPort 外网ssh服务端口
vpsUser 外网用户名
vpsIP 外网用户名
 
neiwang@ZHIPENG-PC ~ $ ssh -C -R 3345:localhost:22 -p 22 zhipeng@VPSIP
 
Last login: Tue Jun  9 13:12:51 2015 from NeiWangIP
Welcome to WaiWang Compute Service!
# OK,成功登陆到外网服务器上
 
# 二、现在再查看一下外网的SSH端口状态
可以看到,外网已经在监听3344端口,并且和内网电脑建立了ssh连接
[zhipeng@zhangzhipeng2023.cn ~]$sudo netstat -anopl | grep ssh
[sudo] password for zhipeng:
tcp     0    0 127.0.0.1:3345      0.0.0.0:*        LISTEN    22799/sshd: zhipeng  off (0.00/0/0)
tcp     0    0 0.0.0.0:22        0.0.0.0:*        LISTEN    22645/sshd      off (0.00/0/0)
tcp     0   36 VPSIP:22    NeiWangIP:11694    ESTABLISHED 22796/sshd: zhipeng  on (0.38/0/0)
 
 
# 三、 接着,试一下从外网ssh内网
$ssh -C  -N -D(vpsPort ) -p(mySSHPort ) (myHostname )@(vpsHostname 
参数我就不解释了,看名字和第一步对比就知道了 myName是内网用户名
我这里加-f -N 是会报错的,如下:
[zhipeng@zhangzhipeng2023.cn ~]$ssh -C  -f -N -D 3345 -p 3345 neiwang@localhost
The authenticity of host '[localhost]:3345 ([127.0.0.1]:3345)' can't be established.
ECDSA key fingerprint is 93:e8:a5:fa:1a:3e:0e:19:6e:c3:28:af:f7:9d:15:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:3345' (ECDSA) to the list of known hosts.
neiwang@localhost's password:
bind: Cannot assign requested address
channel_setup_fwd_listener: cannot listen to port: 3345
Could not request local forwarding.
 
[zhipeng@zhangzhipeng2023.cn ~]$sudo ssh -C -D 3345 -p 3345 neiwang@localhost
neiwang@localhost's password: #输入内网密码
bind: Cannot assign requested address
channel_setup_fwd_listener: cannot listen to port: 3345
Could not request local forwarding.
Last login: Tue Jun  9 13:18:53 2015 from 127.0.0.1
 
[2015-06-09 13:21.51]  ~
[neiwang.neiwang-PC] 0bB logout
Connection to localhost closed.
 
ssh反向代理大功告成。
 
题外话,也不能全算题外话,很重要的
0、安全问题,慎用。
1、别忘了打开内网的sshd服务
2、外网iptables记得打开端口(防火墙)
3、如果内网电脑是windows,记得关闭防火墙,或者设置好端口访问,不然ssh 22端口会访问异常无法连接。
来自:http://blog.sina.com.cn/s/blog_83dc494d0102vph3.html
posted @ 2016-06-30 20:04  阿玛  阅读(14154)  评论(1编辑  收藏  举报