Categorygithub.com/jiajunhuang/natproxy-client
modulepackage
0.0.9
Repository: https://github.com/jiajunhuang/natproxy-client.git
Documentation: pkg.go.dev

# README

NatProxy

此处文档为0.0.8版本,为 https://jiajunhuang.com/natproxy 的镜像文档,更新可能不及时。最新文档请阅读 https://jiajunhuang.com/natproxy

NatProxy是一个方便、快捷的内网穿透工具,借助natproxy,你可以远程访问在家里的电脑。例如,通过NatProxy你可以做到:

  • 远程访问在家里的笔记本电脑
  • 将本地开发的网页发给朋友看
  • 将局域网内的其他服务共享给别人
  • 等等

如何使用NatProxy

下载

首先,我们需要下载NatProxy客户端,在 这个页面 点击最新版本下载,下载完成之后,把它放到你想要的目录,如果是Linux/macOS用户,记得添加可执行权限:

$ sudo chmod +x ./natproxy

为了方便在命令行里执行,你还可以把它添加到 /usr/local/bin/ 下面:

$ sudo mv ./natproxy /usr/local/bin/

注册和登录

为了natproxy提供的免费服务器不被滥用,我们需要先注册一个帐号,通过命令行便可以做到,Linux和macOS用户打开终端,Windows用户 打开cmd,如果已经把natproxy添加到了 PATH 环境变量里(Linux/macOS直接把文件放到 /usr/local/bin 下即是,Windows用户需要 更改环境变量),那么可以直接输入 natproxy,如果没有的话,需要切换目录到 natproxynatproxy.exe 所在的目录下执行。

如果没有添加到 PATH 里,那么下面所有的命令,例如 natproxy -register 都应该该写成 ./natproxy -register,windows用户 应该写成 .\natproxy -register

首先我们注册:

jiajun@idea  ~ $ natproxy -register -email='[email protected]' -password='xxxxxxxx'
2019/06/15 10:59:46 注册成功

然后登录一下获取token:

jiajun@idea  ~ $ natproxy -login -email='[email protected]' -password='xxxxxxxx'
2019/06/15 10:59:59 登录成功,token是 b1c6abcdabcdabcd92666f980fcaabcd

接着我们就可以确认一下token是否有效:

jiajun@idea  ~ $ natproxy -token=b1c6abcdabcdabcd92666f980fcaabcd
2019/06/15 11:00:17 准备连接到服务器(natproxy.laizuoceshi.com:8443)...
2019/06/15 11:00:17 成功连接到服务器(natproxy.laizuoceshi.com:8443)
2019/06/15 11:00:18 检查当前服务端是否已经把本账号设置成断开连接: false
2019/06/15 11:00:19 服务器分配的公网地址是nats-cn1.laizuoceshi.com:25861
^C

如果出现 服务器分配的公网地址是.... 的字符,那就说明已经注册成功了

使用

我们简单地看一下帮助文档

jiajun@idea  ~ $ natproxy --help
Usage of natproxy:
  -email string
    	注册邮箱
  -local string
    	-local=<你本地需要转发的地址> (default "127.0.0.1:8080")
  -login
    	是否登录
  -password string
    	注册密码
  -register
    	是否注册
  -server string
    	-server=<你的服务器地址> (default "natproxy.laizuoceshi.com:8443")
  -socketBufferSize int
    	连接缓冲区大小,越大越快,但是也更吃内存 (default 32768)
  -tls
    	-tls=true 默认使用TLS加密 (default true)
  -token string
    	-token=<你的token> (default "balalaxiaomoxian")
  -toolsAPI string
    	tools API (default "https://tools.jiajunhuang.com")

可以知道,如果我们要使用natproxy进行内网穿透,那么首先要有token,token我们已经有了,然后就是告诉natproxy,我们想把什么 暴露出去。例如,我的例子里,是把 127.0.0.1:80 这个地址暴露出去。

首先我们要确认地址是可以连通的,我们使用telnet来确认:

jiajun@idea  ~ $ telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^]
telnet> 
Connection closed.

这样说明能连通,如果卡着半天没有动静,那么就说明无法连通。转发一个无法连通的地址,是无效的。 我们来把 127.0.0.1:80 进行转发:

jiajun@idea  ~ $ natproxy -token=b1c69eba0770434192666f980fcafa1e -local='127.0.0.1:80'
2019/06/15 11:00:44 准备连接到服务器(natproxy.laizuoceshi.com:8443)...
2019/06/15 11:00:45 成功连接到服务器(natproxy.laizuoceshi.com:8443)
2019/06/15 11:00:45 服务器分配的公网地址是nats-cn1.laizuoceshi.com:25861
2019/06/15 11:00:48 检查当前服务端是否已经把本账号设置成断开连接: false

这个时候我们自己开一个新的终端来试试是不是已经成功了:

jiajun@idea  ~ $ http HEAD nats-cn1.laizuoceshi.com:25861
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Sat, 15 Jun 2019 03:01:19 GMT
Server: nginx/1.16.0

大功告成!通过这个公网地址,我们已经访问了在本地的HTTP服务。

使用systemd开机自启

编辑 /etc/systemd/system/natproxy.service:

[Unit]
Description=NatProxy Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/natproxy -token='<你的token>' -local='<你的目标地址>'

[Install]
WantedBy=multi-user.target

然后执行:

$ sudo systemctl daemon-reload
$ sudo systemctl enable natproxy
$ sudo systemctl start natproxy
$ sudo systemctl status natproxy  # 查看是否成功启动

NatProxy 适合做什么?

  • ssh远程访问内网Linux
  • rdp远程访问内网Windows
  • 将局域网内的HTTP服务临时暴露出来
  • ...等等类似的

NatProxy 不适合做什么?

  • 暴露游戏服务器:游戏服务器很多都是使用udp协议进行通信,natproxy暂时还没有支持udp
  • 高并发服务:NatProxy目前没有支持连接池,每次公网请求到来,服务端才下发指令要求客户端发起连接进行转发,因此很难应对高并发 的需求,且服务端为了安全,对每个用户进行了连接数限制。

注意事项

  • 由于会把服务暴露在公网,因此请务必注意不能转发带有私密信息的服务
  • 如果要发送带私密信息的服务,我建议:使用安全的通信协议,例如SSH,或者如果是HTTP服务,在你本地的服务上加TLS,这样可以 保证无人能进行中间人攻击;如果是HTTP服务,加上basic auth
  • 数据安全的问题所有的内网穿透工具都会有,NatProxy客户端和服务端之间的通信是加密的,也就是说,中间人无法知道你会分配在公网的 哪一台服务器。并且安全始终是NatProxy所重视的,后续会推出新的安全相关的功能来进行应对。

反馈问题

你可以加我微信 gansteed 注明“natproxy” 进natproxy用户群,也可以在 https://github.com/jiajunhuang/natproxy-client/issues 提issue。

为什么不用frp?

因为frp需要自己有一台服务器,而NatProxy可以免费获得。

# Functions

Start client.