SSH隧道访问内网服务

适用场景描述:我有一台外网服务器a,1台内网服务器b,我想让别人在外网访问b上的网站。b跟a不在同一个局域网。b没有公网ip地址a有


解决方案1:通过花生壳实现

我的解决方案:

    两台机器都是linux系统通过ssh,b可以访问a,a不可以访问b。由b到a建立ssh隧道。
    b上的本地端口是80,a上的隧道监听入口是20001.这样在a上访问端口20001就跟直接访问b上的80端口的结果一致。
    此时由于隧道是监听在本地的端口上的。从外网访问不到a上的20001. 我们在a上现在启动一个端口转发程序rinetd  。让访问a上20002端口的数据全部转发给a上的20001,a上的20002是监听在任意ip地址的,所以通过外网可以访问a上的20002端口
    这样就实现了通过a的20002端口访问内网b上的80端口,只要隧道保持不断,b就像真的拥有了固定ip地址一样。
    由于ssh直接建立的隧道有可能会断开,所以我使用了autossh工具来自动完成断线重连功能。

    说明一下:隧道是在b上建立的,把下边a.a.a.a替换成a的公网ip地址即可

隧道建立方式1

 autossh -p22  -M 5000 -NR 20001:0.0.0.0:80 [email protected]

隧道建立方式2


ssh -R 20001:localhost:80 [email protected]



端口转发配置

# bindadress    bindport  connectaddress  connectport
0.0.0.0 20002 127.0.0.1 20001



抽空要试下windows的远程桌面能否通过此方法来访问也就是b是windows,a是linux的前提下进行隧道建立和端口数据转发

ssh隧道另外常用的功能就是通过隧道建立sockes服务来实现科学上网





你可能感兴趣的:(ssh,内网,隧道,外网)