【原创】自建和谐代理和文件同步服务器

本文是自9月初由于众所周的原因,vpn被大面积禁用以来到10月底的折腾过程,这次彻底解决了长期以来困扰我的一些问题。我这个人一向比较懒,各家的云服务能凑合用就用,把精力放在自己的专长上。以往*通道被堵也就一周左右就恢复了,可这次竟然长达一个月,对于我这种依赖google的人来说简直忍无可忍。虽然vpn节点恢复以后接到商家的道歉并赠送了两个月的时长,但总有种被限制人身*的感觉。

解决方法很简单,建私服。国外稳定的vps服务商有不少,我选的是Vultr,买最便宜的一个月5刀的主机就行(以前似乎有2.5刀的时候,不过好像已经没有了),反正就几个人用,不在乎性能。既然是替代vpn用,主机自然是选在墙外的,然后找一个反向代理隧道到自己的电脑上就完事了。思路确定了就动手吧,实现方法很多,下面只是我自己的操作。

一、准备vps主机

购买vps主机的时候有几个地方要注意,一个是国家,尽量选离中国近的,比如日本。我实测洛杉矶的Ping延迟在260ms左右,东京120ms左右。再来是系统选择,由于我长期以来用的都是Debian系的系统,自然选择Ubuntu Server。CentOS没玩过不太懂,不过应该原理都是一样的。不会Linux的也可以选Windows,反正装的软件都一样。这里要注意的是16.04和18.04的启动过程不一样,查过资料后发现是18.04以后用systemd取代了传统的init.d,不过这都小事。

【原创】自建和谐代理和文件同步服务器

 

 

接下来硬盘选最小的,其它什么都不选,远程登录可以用密码也可以用SSH Key如果你有的话。没问题点Deploy部署实例。

【原创】自建和谐代理和文件同步服务器

 

 

 

实例建好之后会得到一个固定IP,在自己的电脑上打开cmd控制台,可以连接到远程主机中

ssh root@149.28.113.43

进到Linux Bash里面该就轻车熟路了吧

【原创】自建和谐代理和文件同步服务器

 

 

 二、安装*服务端

*是一个开源代理软件,可以根据所访问的站网是否被墙隧道到自己的电脑上,支持TCP和UDP协议转发,多用户管理。Github地址:https://github.com/*/*/wiki。我们要在vps上安装服务端。要注意的是这个项目有很多的fork,也有很多种语言的实现,我们的服务端版本使用最常用的python版即可,其它的如libev版虽然性能比较强但不支持多用户连接。输入以下命令即可安装

apt-get install python-pip
pip install git+https://github.com/*/*.git@master

装好以后建立配置文件,最后Ctrl+C退出编辑。用port_password字段建了3个用户,每个用户有独立的端口和密码

cat > /etc/*.json
{ 
    "server":"0.0.0.0", 
    "port_password": { 
        "8381": "pwd1", 
        "8382": "pwd2", 
        "8383": "pwd3" 
    }, 
    "local_address": "127.0.0.1",
    "local_port":1080, 
    "password":"mypassword", 
    "timeout":300, 
    "method":"aes-256-cfb", 
    "fast_open": false 
}

再输入下面的命令运行服务端

ssserver -c /etc/*.json

不过这样只能在一个bash登录进程中运行,关了服务器就停了,要让它一直在后台运行,需要写个脚本。Ubuntu Server 18.04版建议用systemd做自启动,所以新建以下脚本/usr/lib/systemd/system/*.service

[Unit]
Description=A fast tunnel proxy that helps you bypass firewalls.
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=ssserver -c /etc/*.json -d start
ExecStop=ssserver -c /etc/*.json -d stop

[Install]
WantedBy=multi-user.target

写好以后启动服务

systemctl start *.service

查看服务端运行状态

systemctl status *.service

到这里服务端算是OK了,下面安装客户端

二、安装*客户端

客户端非常简单,还是在github地址上找到win版下载地址https://github.com/*/*-windows/releases,安装以后打开,新建服务器地址,填上服务端的信息。PAC模式的意思是*会检测你访问的网站是否被墙,只有被墙的网页才会用代理访问,否则不走代理。建议把客户端设为开机自启动,然后把PAC一直打开就可以了。

【原创】自建和谐代理和文件同步服务器     【原创】自建和谐代理和文件同步服务器

 

 

按照天朝的惯例,每年到关键的时刻就会大量关停VPN,因为这些商家是把海外服务器用作单一的代理用途,且是商业行为。而私服不一样,vps是通用云服务器,下面我们还可以使用vps作为私人网盘来用。就算IP被封停了大不了再开一个新的实例就行了,所以理论上再也不用担心Google上不去了。

三、VPS用作内网穿透服务器

你可能会说一个月5刀,就为上个google,傻X吧...  好吧我同意你的说法(土豪除外)。一直以来让我不爽的另一个云服务就是同步网盘,注意是同步盘不是百度网盘。在不需要*的年代我一直用Dropbox,后来用过金山,微软等等一堆,用的时间最长的是坚果云。说实话坚果云很好用,如果只是办办公同步个资料的话这个产品相当不错,但也有点小贵,最便宜的一年200。那可不可以把VPS当同步盘用呢,答案是如果你钱多的没地方花了,可以。因为VPS的硬盘空间非常贵(80G空间20刀每月),所以我的做法是把家里的一台老爷机当作文件服务器,再用VPS做内网穿透,这样无论在哪个地方我都可以访问自己家里的电脑。

这个应用场景人数应该没那么多,更多的是用于自建网站,跑IIS或Apache的机器因为在内网背后,只能在路由器上做端口转发。如果是公司宽带还好,有固定IP,如果是家庭宽带,连个公网IP都没有,又或者是动态IP,基本上就没法弄了。所以那个叫花生壳的公司才这么火爆,他们无非就是有个服务器,把固定的域名解析到你的动态IP背后,收费一年400。对你没看错,一年400。下面我们把拥有固定IP的VPS用于内网穿透的解析。

打开https://github.com/fatedier/frp,这是一个快速反向代理项目,官网给出的简介是

What is frp?

frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it supports TCP and UDP, as well as HTTP and HTTPS protocols, where requests can be forwarded to internal services by domain name.

这不就是免费开源的花生壳吗...  好开始,先在VPS中下载

wget https://github.com/fatedier/frp/releases/download/v0.29.1/frp_0.29.1_linux_amd64.tar.gz
tar xf frp_0.29.1_linux_amd64.tar.gz
cd frp_0.29.1_linux_amd64

里面有两个程序,frps是服务端,frpc是客户端,.ini文件是相应的配置文件,systemd目录里面是自启动脚本。先打开frps.ini,里面就两行,意思是监听7000端口,转发80端口

[common]            
bind_port = 7000    
vhost_http_port = 80

把./systemd/frps.service复制到/usr/lib/systemd/system目录中,其中的路径根据你自己的修改一下

[Unit]                                             
Description=Frp Server Service                     
After=network.target                               
                                                   
[Service]                                          
Type=simple                                        
User=nobody                                        
Restart=on-failure                                 
RestartSec=5s                                      
ExecStart=+/usr/local/bin/frps -c /etc/frp/frps.ini
                                                   
[Install]                                          
WantedBy=multi-user.target          

启动服务端,查看运行状态

systemctl start frps
systemctl status frps

至此内网穿透服务就OK了。这里要说明的是根据VPS所在的地点,访问速度会不同,前面开始说最好买香港日本或新加坡的VPS原因就在这里。如果你不需要*更简单了,买个阿里腾讯云ECS就行,搭建方法一样。

四、内网服务器安装NextCloud

Nextcloud是开源项目,我使用后感觉和Dropbox,坚果云等产品非常类似,稳定性也不错,重要的是完全免费。同步盘最好不要装在VPS上,原因前面说了,空间非常贵。所以我的办法就是把老爷机搬出来作文件存储用,硬盘有多大网盘有多大(80G要20刀/月...笑)。这里要特别注意硬盘的可靠性,最好用RAID1,别不舍得这点钱,俗话说数据无价,Dropbox曾经就救过我的命,重要文件完好无损。在老爷机上安装Ubuntu Server,安装过程自行百度不再废话,16.04以后的版本在安装过程中会有选项自动安装nextcloud,如果错过了也可以手动安装,在root用户下面打命令

snap install nextcloud

安装速度取决于你的仓库速度,我用的是清华大学的源。查询安装是否成功

snap list

这里要做一些配置才能正确访问,先跳过,把frp客户端先跑起来。下载frp软件包,方法和前面的一样,打开frpc.ini,配置如下

[common]                                        
# server_addr 为 FRP 服务端的公网 IP                   
server_addr = 149.28.113.43                     
# server_port 为 FRP 服务端监听的端口                    
server_port = 7000                              
                                                
[web]                                           
type = http                                     
local_port = 80                                 
custom_domains = nextcloud.yourdomain.com           

要注意的是你得先有一个自己的*域名,我的域名是在阿里云上注册的,一年8块钱。最烦的是现在的域名都要做备案,不然不让你解析,备案审核时间相当漫长,花了大概半个月。以上的custom_domains就是这台老爷机的域名,然后在阿里云里做A记录解析,地址写VPS的公网IP。frpc的自启动也很简单,把frpc.service复制到/usr/lib/systemd/system目录里,改下执行路径就好了

[Unit]                                                    
Description=Frp Client Service                            
After=network.target                                      
                                                          
[Service]                                                 
Type=simple                                               
User=nobody                                               
Restart=on-failure                                        
RestartSec=5s                                             
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini        
ExecReload=/usr/bin/local/frpc reload -c /etc/frp/frpc.ini
                                                          
[Install]                                                 
WantedBy=multi-user.target                                

启动frpc服务

systemctl start frpc

frpc配置好了以后还需要配置nextcloud的访问权限,打开/var/snap/nextcloud/current/nextcloud/config/config.php,添加自己的域名。

'trusted_domains' =>                 
array (                              
  0 => '192.168.*.*',                
  1 => 'nextcloud.yourdomain.com'
) 

配置完成后要重启nextcloud服务

snap restart nextcloud

这样应该就OK了,访问一下http://nextcloud.yourdomain.com,跳出注册页面,是不是跟国内网盘一样。nextcloud有windows客户端,装一下选个同步目录即可。需要说明的是nextcloud默认使用的是https协议,这里我们不需要,除非你相当有钱(看下阿里云里一个SSL证书多少钱),所以域名前面的http://不能省略。至此我们的私有文件服务器就安装完成了,以后再也不需要看别人脸色了。nextcloud还有安卓和IOS客户端,有兴趣的朋友可以试下,我没用过。

 

对于建站的人,只需要把frpc配好就可以了,frps可以转发80端口的数据,不需要在路由器上做端口映射。

五、总结

经过实测,我的美国服务器nextcloud下行速度500k,如果在日本我相信可以达到800k。Dropbox网页可以上,但是客户端依然不能连接,我认为原因是frp只能转发http和https,对于dropbox应该是有自己的应用层协议,frp并不支持。

经过一个月的实战(其中有20多天都在等备案,还跨了个十一),终于把我们两台服务搭建完成了,目前运行了10天完全正常。每月5刀还是相当值得的。另外还有些小功能可以集成,比方说

1. 如果用过印象笔记,网易云笔记的,可以扔了,直接用同步盘就好,写WORD文档,手机也能看

2. 用过VS2015和2017的都知道可以做Linux项目,我们可以把VPS作为开发服务器来用,不过不爽的是每次F5调试都要等好久,我还是直接在Linux环境下开发吧

Ubuntu Server里面还有好多服务端软件可以用,以后慢慢发掘看。

本文完全原创,实战跑通,特此分享,谢谢观看

上一篇:记一下location


下一篇:*搭建教程