最近阿里云的服务器即将到期,续费吓尿了我,还不是穷。。。看了很多云都是1m的服务器配置,内存小,玩个docker就满了,so转战本地内网穿透方案。看了YouTube很多推荐软路由的,整好可以尝试一下,可以跑满你的带宽,还可以用来跑服务,美滋滋。

首先来介绍一下软路由

入手了一台amd的工控机用来做软路由,看了不少大神的视频查阅了无数资料,然后自己折腾一番以后安装配置好了双软路由ikuai+lede+centos7+win7。ikuai用来拨号控流等、lede负责接AP和翻墙等拓展(安装了koolss、v2ray等酷软中心已经下架的插件)、centos7用来跑网站服务,win7偶尔用到先装着~

安装设置pve系统

爱快拨号

lede负责翻墙

手机连接wifi直接可以google

 

cpolar

我经常逛v2ex,在里面搜索内网穿透的方案,无意间看到cpolar的官网,感觉还可以,注册试一下。一条命令就解决了,太方便了

 ./cpolar http 80

但是这样每次断开ssh,隧道也会消失,so想办法开机启动,看了官网的文档都是使用nohup命令,让cpolar进程运行在后台,哥是学node的,也有专门的pm2用来守护进程,嘻嘻。

现在centos7跑起node服务,然后用pm2来守护进程。

[root@localhost ~]# pm2 list
┌────┬─────────────────────────┬─────────┬─────────┬──────────┬────────┬──────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name                    │ version │ mode    │ pid      │ uptime │ ↺    │ status   │ cpu      │ mem      │ user     │ watching │
├────┼─────────────────────────┼─────────┼─────────┼──────────┼────────┼──────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ cpolar                  │ N/A     │ fork    │ 5147     │ 20h    │ 3    │ online   │ 0%       │ 1.2mb    │ root     │ disabled │
│ 1  │ seafile                 │ N/A     │ fork    │ 14446    │ 0s     │ 128… │ online   │ 0%       │ 1.2mb    │ root     │ disabled │
│ 2  │ ykb_web                 │ 1.0.0   │ fork    │ 2453     │ 2D     │ 0    │ online   │ 0.8%     │ 86.2mb   │ root     │ disabled │
└────┴─────────────────────────┴─────────┴─────────┴──────────┴────────┴──────┴──────────┴──────────┴──────────┴──────────┴──────────┘

在cpolar配置文件中添加隧道

vim /root/.cpolar/cpolar.yml
authtoken: YzNmYmUzOTctODMxNyxxxxxxxxxxxxxxxxxTZkNjczOGM3
tunnels:
  centos_http:
    addr: 3001
    hostname: www.lyseky.com
    proto: http
    region: cn
    crt: /etc/nginx/cert/lyseky.com/fullchain.cer
    key: /etc/nginx/cert/lyseky.com/lyseky.key
    redirect_https: true

我的node端口是3001,设置了http强制跳转https,证书用的是Let's Encrypt颁发的三个月泛域名,我的原则是能用就用免费的,还不是穷。。。

Let's Encrypt 是一个免费,自动化和开放的证书颁发机构。官方已经支持免费签发通配符域名证书,即泛域名证书,俗称野卡。

安装acme.sh

 curl https://get.acme.sh | sh

获取DNS api

acme.sh支持cloudflare,dnspod,aliyun,GoDaddy,CloudXNS等大约80余种DNS解析商。详情可看dnsapi(https://github.com/Neilpang/acme.sh/wiki/dnsapi)。这里一腾讯云为介绍,阿里云也一样。首先去腾讯云dnspod官网获取dns的DP_Id和DP_Key,腾讯云因为是使用的dnspod,所以需要去这个的官网申请。请注意,key只能查看一次,需记住!不过可以再次申请,忘记了也没多大问题。获取到了这两者后,回到服务器进行如下操作,添加至环境变量中:

export DP_Id="89XXXX"
export DP_Key="71943XXXXXXXXXXXXXXXXXXXXXXXX"

签发证书

接下来,当将dns api添加到环境变量中后,便要开始签发证书了,这一步也很简单的,别慌。

此处依旧使用腾讯云作示例:

acme.sh --issue --dns dns_dp -d lyseky.com -d *.lyseky.com

其中,--dns表示通过dns方式签发,其实还可以http验证,不过这个不利于后期的自动更新,由于Let's Encrypt签发的证书只有三个月有效期,所以此方法此处略过。

-d后面跟着域名,dns_dp是指dnspod,不同的域名解析商,此段不一样,具体看上一步的dnsapi。泛域名最好使用lyseky.com和*.lyseky.com两者结合,当然也可以只*.lyseky.com。目前两者都玩过,还没细究有何区别。

在这一步,acme.sh会自动在dns添加dns记录验证域名所有权。

copy/安装证书

证书生成后, 需要把证书 copy 到真正需要用它的地方。注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件。

正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,。

你可以在nginx目录建一个专门存放证书的目录:

sudo ~/.acme.sh/acme.sh --installcert -d lyseky.com \
--key-file /etc/nginx/cert/lyseky.com/lyseky.key \
--fullchain-file /etc/nginx/cert/lyseky.com/fullchain.cer \
--reloadcmd "service nginx force-reload"

接下来用crontab就回自动生成一条记录来自动更新证书

[root@localhost ~]# crontab -l
44 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
0 2 * * * pm2 restart cpolar
0 2 * * * pm2 restart seafile

接下来新建cpolar.sh脚本来给pm2的守护进程

/root/data/cpolar start-all -log=/root/shell/cpolar/cpolar.log
pm2 start cpolar.sh

到这一步守护进程就搞定了,去cpolar后台看一下后台也多了隧道,可以重启系统验证一下,over~

cpolar官网:https://i.cpolar.com/m/4D0t