内网穿透、本地转发
     分类:环境搭建     有: 0 条评论

内网穿透、本地转发

     分类:环境搭建     有: 0 条评论

goproxy

一款功能超多的内网穿透工具
https://github.com/snail007/goproxy


ngrok

一键脚本:https://github.com/clangcn/ngrok-one-key-install

域名配置

1、使用三级域名的按如下设置,
域名DNS设置:ngrok.leolan.top(用于查询服务器)和*.ngrok.leolan.top(用于映射三级域名)--》两个域名A纪录到服务器IP。
三级域名是不固定的,所以用*

2、如果使用第三方证书,且只支持二级域名的通配符证书,如:Let's Encrypt的通配符证书
这里使用的是*.leolan.top通配符证书
域名DNS设置:ngrok.leolan.top(用于查询服务器)和*.leolan.top(用于映射三级域名)--》两个域名A纪录到服务器IP。
注意:泛域名映射到一台主机是比较高风险的操作,所有未指定的二级域名都会被映射过去!!!


编译

yum install go -y

# 不要使用发布的版本,编译有问题(也可能是环境问题)
git clone https://github.com/inconshreveable/ngrok.git /usr/local/ngrok
cd /usr/local/ngrok

export GOPATH=/usr/local/ngrok/  #设置环境变量,ngrok源码目录
export NGROK_DOMAIN="ngrok.leolan.top"  #设置环境变量,ngrok域名,
# 如果域名设置中选了第二种方式(第三方证书),这里应为:NGROK_DOMAIN="leolan.top"

##########################################
# 为域名生成证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

# 复制证书到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

如果使用第三方证书,如Let's Encrypt证书,忽略上面两部,执行下面步骤
cp fullchain.pem assets/client/tls/ngrokroot.crt  #客户端
cp fullchain.pem assets/server/tls/snakeoil.crt   #服务端
cp privkey.key assets/server/tls/snakeoil.key     #服务端

参考资料:https://blog.csdn.net/u013379553/article/details/88651599
##########################################

# 编译服务端和客户端(更改域名后要重新编译),根据需要选择
# win
GOOS="windows" GOARCH="386" make release-server release-client
GOOS="windows" GOARCH="amd64" make release-server release-client

# linux
GOOS="linux" GOARCH="386" make release-server release-client
GOOS="linux" GOARCH="amd64" make release-server release-client

# Mac
GOOS="darwin" GOARCH="386" make release-server release-client
GOOS="darwin" GOARCH="amd64" make release-server release-client

然后可以在bin下看到已编译好服务端和客户端文件。

服务端(Linux)

这里开启HTTP:8001;;;HTTPS:8002;;;Tunnel:4443(该端口只参与配置、调度,不参与转发数据)
# 新建启动脚本(同理,域名配置选了第二种方式的,这里应为:-domain="leolan.top")
# 使用证书同时可以修改端口-httpAddr=":80" -httpsAddr=":443",通信端口tunnelAddr保持不变
vim start_ngrok.sh
#!/bin/bash
nohup /usr/local/ngrok/bin/ngrokd \
      -domain="ngrok.leolan.top" \
      -httpAddr=":8001" \
      -httpsAddr=":8002" \
      -tunnelAddr=":4443" &

# 如果配置了证书,还要带参数启动:
-tlsKey="/usr/local/ngrok/assets/server/tls/snakeoil.key"
-tlsCrt="/usr/local/ngrok/assets/server/tls/snakeoil.crt"

客户端

原理:启动客户端时连接ngrok.leolan.top:4443;并把需要转发的本地端口和三级域名转发过去,同时根据参数使用HTTP还是HTTPS,自动使用8001还是8002;通过指定三级域名来建立多个链接。

新建配置文件

新建ngrok.cfg文件,内容如下
# 定义服务器通信地址
server_addr: "ngrok.leolan.top:4443"
trust_host_root_certs: false
# 服务端如果配置了证书启动,这里要为true

启动脚本

# 根据系统不同,建立bat或sh脚本文件,以linux系统为例
#!/bin/bash
/opt/ngrok/ngrok_linux -subdomain $1 -config=/opt/ngrok/ngrok.cfg -proto $2 $3
echo '请输入xxx.sh [域名前缀] [http或https] [本地端口]'

一切正常的话就可以连上了。域名不对会报:bad certificate;;;重新生成证书。

Docker

参考:https://leolan.top/index.php/posts/222.html

反向代理

如果是用于微信开发之类的,要80端口,可以用nginx做反代;记得加端口!!!,

proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host:8001;

参考资料:
HTTPS支持、TCP穿透:https://yii.im/posts/pretty-self-hosted-ngrokd/


开发机配置、多隧道

开发机配置:https://blog.csdn.net/riverjiant/article/details/70757607
多隧道:https://free-e.net/112
多隧道、多协议:https://www.jianshu.com/p/69b4f10ad954

参考:
http://blog.csdn.net/zhangguo5/article/details/77848658?utm_source=5ibc.net&utm_medium=referral
https://www.sunnyos.com/article-show-48.html
https://yq.aliyun.com/articles/11852


SSH内网穿透

推荐博文:https://blog.csdn.net/dufufd/article/details/75578277

本地转发

# 场景,如本地开发机通过公网测试服务器访问RDS(授权了测试服务器的IP可访问)
# 在本地机器上执行(有权限链接跳板机)
ssh -L 9527:数据库服务器:3306 root@跳板机(代理机器、测试服务器)、
数据库服务器可以和跳板机是同一台(授权IP访问,但本地又没有固定IP的情况)

解释为,当访问本机的9527的端口时,被加密后转发到跳板机的ssh服务,服务器的3306端口

注意的点:


远程转发(内网穿透)

# 场景,本地服务需要开启公网访问
# 在本地机器上执行(有权限链接跳板机)
ssh -R 9527:内网机器:3306 root@公网机器(代理机器、测试服务器)
内网机器可以是本机,也可以是和本地同一内网的机器

让公网服务器监听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到内网机器ssh客户端,再由内网机器ssh客户端解密后转发到内网机器3306端口。这听起来有点奇怪,因为这个时间内网服务器充当了两个角色,就是ssh客户端和server端。

这个时候就是让公网服务器监听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到跳板机ssh客户端上,再由ssh客户端解密后转发到内网机器3306端口上。

注意的点:


动态转发(科学上网)

ssh -qTfnN  -D 127.0.0.1:9527 root@香港服务器

浏览器:推荐chrome浏览器switchyOmega插件设置为下就可以了。
命令行:

brew install proxychains-ng
vim /usr/local/etc/proxychains.conf # 在ProxyList配置段下添加配置 "socks5     127.0.0.1 9527"

proxychains-ng wget http://xxxxx # 在其它命令行前添加proxychains-ng即可

ssh链接:

# 用以下命令使用socks5代理:
ssh -o ProxyCommand='/usr/bin/nc -X 5 -x 127.0.0.1:5000 %h %p' root@xxxxx

转发常用的参数用法:

ssh -qTfnN -D 127.0.0.1:12345 test@222.333.444.555

如何使用Xshell在windows机器上动态转发

见参考资料


参考资料:
https://zhuanlan.zhihu.com/p/65681748
http://www.dkys.org/archives/1317.html



frp


ZEROTIER ONE

配置:
https://post.smzdm.com/p/741270/
https://post.smzdm.com/p/alpzrnx8/

自建握手服务器(moon):
https://zczc.cz/2018/03/14/ZeroTier-moon-%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/
Docker版:https://zczc.cz/2018/05/13/Docker-%E4%B8%A4%E9%94%AE%E5%88%9B%E5%BB%BA-ZeroTier-moon-%E8%8A%82%E7%82%B9/

(●゚ω゚●)