内网穿透&反向代理(奇技淫巧)

Motivation

我搭建内网穿透,主要是因为在阿里云租的服务器配置较低,考虑到如果把一些web service放在阿里云上面运算,可能提不起来速度,也会消耗较多的云服务器资源,使得我能同时部署的项目变少。所以需要将service搭在内网,然后通过外网的ip访问内网的服务。内网穿透负责让内网的service端口A映射到外网的监听端口B,反向代理让外网的访问端口C能和监听端口B连上。
这里介绍一种快捷、轻便的方案。虽然有一些不足,但是很适合在完全不懂原理的情况下操作。
然而我以后可能会直接使用内网穿透&反向代理(重剑无锋)的方案了。

介绍

最初在网上试了很多,nginx,ngrok,ssh,都有坑。最终还是万能的github解决了问题。
这个rproxy项目主要基于go语言编写。代码简短,理解原理、实际使用上都非常方便。但是我试过之后无法实现ssh穿透。
这个tunnel项目主要用c语言编写,代码也很简单。可以实现ssh。有个不足是,它无法指定公网的对外ip,即公网的端口是变化的,所以运行之后,还要去阿里云上面开放端口,也有点蠢。
所以还是推荐直接采用这个方案内网穿透&反向代理(重剑无锋)

下面分为3个部分

  • 安装go语言
  • 使用rproxy
  • 使用tunnel

安装go

  • 自动安装
    最简单的是用yum install golang,但我没成功,提示说没golang这个包,所以要手动安装。
  • 手动安装
  1. 下包
    直接进golang官网下载无法成功,没能连出去。所以去这个中文站手动下载。
    下载之后解压安装,目录为/usr/local:tar -C /usr/local -xzf filename,由于版本不同,所以filename改成自己下的名字。
  2. 配置环境变量
    vi /etc/profile在最后加上下面3行
export GOROOT=/usr/local/go #设置为go安装的路径
export GOPATH=/code/goDemo #默认安装包的路径
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

更新配置文件source /etc/profile

  1. 查看版本信息:go version,如果有输出就是成功。
    golang成功安装

使用rproxy做内网服务穿透

  1. 拉代码:git clone https://github.com/ying32/rproxy.git
  2. 给权限:chmod a+x rproxy/*
  3. 编译:
cd rproxy
go build
  1. 到了这里。上面的代码应该在服务端和客户端上都执行一遍。

我们看一下服务端的runsrv.sh文件:vi runsrv.sh。内容为:

./rproxy --tcpport=8818 --httpport=43006 --mode="server" --vkey="DKiic1g3kY"
# --tcpport 是 服务端 对客户端 监听的端口
# --httpport 是 服务端 向外 开放的端口
# --mode 启动模式,server
# --vkey 客户端与服务端建立连接时校验的加密key,简单的。

再看一下客户端的runcli.sh文件:vi runcli.sh。内容为:

./rproxy --tcpport=8818 --httpport=8876 --mode="client" --svraddr="106._._._" --vkey="DKibg3kY"
# --tcpport 是 服务端 对客户端 监听的端口
# --httpport 是 客户端 向服务端 开放的端口
# --mode 默认为client
# --svraddr 为连接服务器的地址,不需要填写端口
# --vkey 客户端与服务端建立连接时校验的加密key,简单的。

如果按我上述的端口设定,分别在客户端和服务端运行程序。
然后在其他机器用浏览器访问106.\_.\_.\_:43006
就会先通过外网的43006端口,转发到外网的8818端口,再转发到内网的8876,达到了通过外网ip访问内网8876端口上的服务的效果。

成功穿到内网的tensorboard

如果想让终端关闭了、进程还能继续跑,可以使用nohup ./xxx.sh运行程序

利用tunnel做ssh映射

由于rproxy没法做ssh,其他的普通ssh方法链接效果有点不好,虽然能成功,但是还是有掉线的问题。
可以选择编译项目,然后运行tunnel和tunneld,项目作者也直接提供了编译好的文件,在这里,可以直接在服务器运行tunneld和在客户端运行tunnel,两个命令解决。

  • tunneld(服务器端)使用说明
    执行 tunneld 文件
tunneld
Enter listening port(default 8877):8877
Enter connection password(default maqian.cc):maqian.cc
Port:8877, Password:maqian.cc
Listening...

这时 tunneld 已启动成功,等待客户端连接。

  • tunnel(客户端)使用说明
    执行 tunnel 文件
tunnel
Enter server IP:xx.xx.xxx.xxx
Enter server port(default 8877):8877
Enter connection password(default maqian.cc):maqian.cc
Enter local port:22
Server IP:xx.xx.xxx.xxx, Server Port:8877, Password:maqian.cc, Local Port:22
Successfully connected, address: xx.xx.xxx.xxx:45915

这样 tunnel 就连接服务器成功了,address是映射到公网的IP和端口,通过访问address的IP和端口就可以访问内部网络服务了。

客户端连接服务器成功
登录客户端成功

其他

ssh反向代理()

参考:
https://www.cnblogs.com/kwongtai/p/6903420.html
https://blog.csdn.net/sinat_27774177/article/details/76474834

问题描述:要让外网的机器C通过阿里云上的B能连到内网的A,配置如下所示:

机器 IP user pwd
局域网机器A 192.168.. student_docker xxx
阿里云机器B 106._._._ root yyy
  1. 先在A上操作:ssh -fCNR 43005:localhost:22 root@106._._._
    43005是指定B机器的端口,这里将B的43005和A的22映射
    ssh -R 43004:localhost:22 root@106._._._

  2. 登去B,查看状态netstat -tnl
    在B上操作:ssh -fCNL *:43004:localhost:43005 localhost
    43004代表另一个映射,43005就是第一步指定的映射。

    在执行ssh命令的时候,会让输入密码,一个是远程密码,一个是内网密码。

  3. 登去C,用ssh连接,ssh -p 43004 student_docker@106._._._
    输入密码xxx,成功登录。

但是这种方式容易断,然而我下载autossh又没有成功,没法开自动监听。

安装ngrok实现内网穿透

参考:https://blog.csdn.net/truong/article/details/73250683

  1. 安装依赖包
    yum install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ golang
  2. 下载,配置,编译,启动服务端
# 克隆ngrok git仓库,
git clone https://github.com/inconshreveable/ngrok.git

cd ngrok
# 设定变量
NGROK_DOMAIN="106._._._"

# 生成秘钥
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "106._._._" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "106._._._" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

# 复制秘钥
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key

# 编译
make release-server
make release-client
# 服务端运行
bin/ngrokd -httpAddr=":8818"
  1. 启动客户端
mkdir ngrok
vi ngrok.cfg

# 输入以下2行内容
server_addr: "106._._._:4443"
trust_host_root_certs: false

# 赋予权限
sudo chmod a+x ngrok
# 启动客户端,将8080端口映射让远程监听
./ngrok -config=ngrok.cfg 8080
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容