这两天忽然想寻找一个低成本Linux系统的解决方案,于是和吴大佬闲聊了一会。吴大佬提出可以使用旧手机来搞一个Linux系统
然后我又想到可以利用类似于花生壳的内网穿透应用来使得这个Linux服务器全网可访问
想想就异常激动呀!那就开搞!
先贴出几篇参考的文章
> [旧手机改装服务器——Android上的Linux(linux deploy)](https://blog.csdn.net/Greepex/article/details/85333027)
> [【Linux Deploy】一、Linux Deploy安装配置使用教程](https://my.oschina.net/zss1993/blog/1790223?tdsourcetag=s_pctim_aiomsg)
上面这两篇文章已经讲得很详细了,但是在整个搭建的过程中还是有一些上面文章没有提到的坑,可能需要注意一下,就写在这篇文章里了
## 0、准备
需要以下几个工具和应用:
+ 一部`root了的`安卓手机
+ 网络不好的话可能需要代理
+ Busy Box 下载地址:[https://github.com/meefik/busybox/releases](https://github.com/meefik/busybox/releases)
+ Linux Deploy 下载地址:[https://github.com/meefik/linuxdeploy/releases](https://github.com/meefik/linuxdeploy/releases)
+ 一部带有shell的可联网的电脑
+ 一个拥有固定公网IP的服务器(搭建Ngrok内网穿透需要)
## 1、安装Linux
这里我使用的是小米的MIX2,所以root方面不存在太大的问题
这里就按照上面两篇文章来就行了
在下载的时候可能会有点慢,换一个源可以解决
记得开启SSH
这里放一下我的配置吧
![QQ图片20190902230404](http://cong-onion.cn/upload/2019/9/QQ%E5%9B%BE%E7%89%8720190902230404-4da96ae740fb4e1f9f10e264164052b4.png)
有一个点,就是如果想要使用安卓内置存储的话,需要`启用挂载`,并按下面的图来挂载一下存储卡
![QQ图片20190902230409](http://cong-onion.cn/upload/2019/9/QQ%E5%9B%BE%E7%89%8720190902230409-910ff24835c34e41bb62dafc48785244.jpg)
挂载位置(第二行)可以自己配置
## 2、配置内网穿透
内网穿透的原理不在这里多说了,网上都有
一开始试了花生壳的免费内网穿透,发现这个速度真是慢的令人发指
正好我之前给我们宿舍的路由器(RT-AC51U)刷过pdm固件,自带有Ngrok的内网穿透模块
所以就打算结合自己的博客服务器(就是现在这个服务器)来搭一个内网穿透服务器
### 配置服务端
网上搜到的教程很多都是从github下载源码 然后在本地用golang编译
不知道为什么他们整那么麻烦……
apt-get就有已经编译好的ngrok-server
下载ngrok-server
```shell
sudo apt-get install ngrok-server
```
下载好了之后按ngrokd -h查看配置信息
```shell
Usage of ngrokd:
-domain="ngrok.com": Domain where the tunnels are hosted # 域名
-httpAddr=":80": Public address for HTTP connections, empty string to disable # http端口,空串代表禁用
-httpsAddr=":443": Public address listening for HTTPS connections, emptry string to disable # https端口,同上
-log="stdout": Write log messages to this file. 'stdout' and 'none' have special meanings # 输出方式
-tlsCrt="": Path to a TLS certificate file # TLS验证文件,主要用于https
-tlsKey="": Path to a TLS key file # TLS密钥,同上
-tunnelAddr=":4443": Public address listening for ngrok client # 隧道端口,用于监听ngrok-client的穿透请求
```
按需配置即可
这里贴出自己的配置
```shell
nohup ngrokd -domain="cong-onion.cn" -httpAddr=":8000" -httpsAddr=":8443" >/dev/null 2>&1&
```
没有使用证书验证,毕竟也没啥人知道我的服务器……
配置完服务端之后,配置客户端
由于我这里直接使用的是pdm固件里的Ngrok模块,所以只需要填好脚本就行了
这里贴出自带脚本的说明
```shell
#!/bin/sh
export PATH='/etc/storage/bin:/tmp/script:/etc/storage/script:/opt/usr/sbin:/opt/usr/bin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin'
export LD_LIBRARY_PATH=/lib:/opt/lib
killall ngrokc
#启动ngrok功能后会运行以下脚本
#使用方法请查看论坛教程:http://www.right.com.cn/forum/thread-182340-1-1.html
#ngrokc -SER[Shost:服务器域名,Sport:服务器端口,Atoken:服务器密码] -AddTun[Type:协议,Lhost:本地ip,Lport:本地端口,Rport:外网访问端口]
#参数说明
#Shost -服务器服务器地址
#Sport -服务器端口
#Atoken -服务器认证串
#type -协议类型,tcp,http,https
#Lhost -本地地址,如果是本机直接127.0.0.1
#Lport -本地端口
#Sdname -子域名
#Hostname -自定义域名映射 备注:需要做域名解释到服务器地址
#Rport -远程端口,tcp映射的时候,制定端口使用。
#注册 http://www.ngrok.cc/ http://www.qydev.com/
#例子:
#ngrokc -SER[Shost:tunnel.org.cn,Sport:4443] -AddTun[Type:https,Lhost:127.0.0.1,Lport:443,Sdname:test] &
#ngrokc -SER[Shost:ss.ngrok.pw,Sport:4443] -AddTun[Type:tcp,Lhost:192.168.38.1,Lport:80,Rport:5678] &
#ngrokc -SER[Shost:ngrokd.ngrok.com,Sport:443,Atoken:xxxxxxx] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:80,Rport:11199] &
#ngrokc -SER[Shost:server.ngrok.cc,Sport:4443,Atoken:xxxxxxx] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:80,Sdname:abcd1234] &
#ngrokc -SER[Shost:server.ngrok.cc,Sport:4443,Atoken:xxxxxxx] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:80,Hostname:www.abc.com] &
```
【杂记】在旧手机上搭建Linux并搭建内网穿透服务器