The Great Firewall(GFW),是国内大陆地区(香港、澳门、台湾没有这个东西)的网络审查系统,所有的内外网络交互数据都会被审查。如果访问的数据包含敏感内容,访问会被强制中断。合法合规的访问必须备案,而未经备案的访问方式被称为VPN、翻墙、梯子。
Virtual Private Network(VPN),虚拟私有网络。一般指相对于公开网络的,只有指定方式才能访问的,利用内外穿透的方式实现公网访问内网的是VPN。可以看到VPN是提供外网访问内网的一种方式,但是因为GFW的存在,中国大陆的网络可以算作一种大范围的内网。
除了内网、公网,还有一种网络叫做暗网(Dark Web),是深网(Deep Web)的一部分,暗网的内容无法用搜索引擎查找,甚至VPN都没有用,需要特定的浏览器,特别的网址。大部分不合法的内容都在里面。我们可以通过搜索引擎找到的内容、甚至不用搜索引擎找到的内容大概只有暗网的1/400。
现在网上的VPN服务商很难找,找到的不知道稳不稳定,会不会随时跑路,会不会被封。
最大的问题,大部分服务商不支持Linux平台,这就让只使用linux的人很难受(比如我)。
本文介绍如何用国外服务器搭建一个VPN。
网络安全一直是大问题,如果数据直接是明文,到达GFW时会立刻被查出来,所以需要加密。
加密方式 Shadowsocks ShadowsocksR V2RayV2Ray使用了新的自行研发的VMess协议,改正了Shadowsocks一些已有的缺点,更难被墙检测到。V2Ray 的节点可以伪装成正常的网站(HTTPS),将其流量与正常的网页流量混淆,以避开第三方干扰。
TrojanTrojan只使用HTTPS
搭建VPN我使用的是Trojan,安全第一。
1、首先准备一台国外的服务器,服务商最好也是国外的。
然后登录到服务器中
512MB + 1 CPU + Ubuntu 20.04 LTS
2、到国外的域名服务商网站(godaddy之类的)购买一个域名。
在DNS控制台,添加一个A记录,并指向服务器IP地址
3、从腾讯或者阿里或者freessl申请一个对应域名的证书。
4、在服务器中安装Apache2或者Nginx,根据自己喜好。确保服务器的80端口可以访问,443即https端口无法访问。
5、从Trojan-Go Github 下载对应服务器平台的安装包
解压上传到服务器上(或者可以直接下载到服务器,在服务器中解压)
在使用之前需要配置一下
6、将example文件夹中的文件复制到程序所在文件夹
先看一下server.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 { "run_type" : "server" , "local_addr" : "0.0.0.0" , "local_port" : 443 , "remote_addr" : "127.0.0.1" , "remote_port" : 80 , "password" : [ "your_password" ] , "ssl" : { "cert" : "your_cert.crt" , "key" : "your_key.key" , "sni" : "your-domain-name.com" } , "router" : { "enabled" : true , "block" : [ "geoip:private" ] , "geoip" : "/usr/share/trojan-go/geoip.dat" , "geosite" : "/usr/share/trojan-go/geosite.dat" } }
password字段改为自己想要的,最好复杂一些。
ssl字段下的cert、key字段填写申请的SSL证书位置,sni填写证书对应的域名。
router字段下的geoip/geosite位置根据实际调整
7、运行命令,这里推荐使用Screen
执行命令
1 ./trojan-go -config server.json
运行效果为
如果443端口被占用,则自动退出。
8、检查一下是否运行正常,在浏览器中输入https格式的域名,应该会看见默认的Apache2页面
Apache2并没有配置SSL,而443端口被trojan-go程序占用,证明运行正常。
在使用nginx作为网络服务器时,如果VPN的Ip和正常网站的ip设置一样的话,会出现访问vpn网址和正常网址网址内容一样的问题。
在/var/www目录下创建一个新目录example.com,在里面创建一个新文件作为vpn服务器的主页,我选择nginx的默认显示页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!DOCTYPE html > <html > <head > <title > Welcome to nginx!</title > <style > body { width : 35em ; margin : 0 auto; font-family : Tahoma, Verdana, Arial, sans-serif; } </style > </head > <body > <h1 > Welcome to nginx!</h1 > <p > If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p > <p > For online documentation and support please refer to<a href ="http://nginx.org/" rel ="nofollow" target ="_blank" > nginx.org</a > .<br /> Commercial support is available at<a href ="http://nginx.com/" rel ="nofollow" target ="_blank" > nginx.com</a > .</p > <p > <em > Thank you for using nginx.</em > </p > </body > </html >
编辑/etc/nginx/sites-enabled
将最后部分的注释去掉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 server { listen 80; listen [::]:80; server_name example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri / =404; } }
这样访问vpn网址时内容不会和其他网站内容冲突。当然apache2也要相应的配置。
服务器搭建完毕
Windows v2rayN从v2rayN 下载最新的版本,当前版本为4.20(需要安装依赖.net
环境)。
运行程序,点击菜单栏最左侧的服务器菜单
然后弹出配置界面
点击确定,在状态栏找到软件的图标,设置自动设置代理模式,然后软件图标会变为红色
使用Firefox时,要设置浏览器的代理设置
这样就可以访问外网了
Trojan-Qt5经过测试,可以使用
Linux v2ray desktop随便下载一个客户端,我用的是Manjaro Linux仓库提供的V2Ray Desktop
经过测试并不能用。
qv2ray然后我尝试了另一个客户端,qv2ray。当然,还有trojan插件
默认界面为:
点击下方的New创建新的链接
然后就可以了,当然浏览器的代理需要设置一下
我在国外服务器使用测试 测试了一些国外服务器,腾讯的香港服务器效果还是不错的,720P无压力,但是使用要低调
优化 启动BBR先安装依赖
1 apt install ca-certificate
运行脚本
1 wget "https://github.com/chiakge/Linux-NetSpeed/raw/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
依次选择1/2/3,试一下哪个可以正常安装或者喜欢哪个。
经过测试,内核没有选,加速选择了4,也就是使用系统BBR。
开机启动默认下载的安装包中有提供trojan-go.service文件
将其复制到/etc/systemd/system/
目录中
将trojan-go软件包以及相关配置文件、ssl证书都复制到/usr/local/目录中(主要是trojan-go要以root权限运行,文件夹拥有者最好是root)
我的是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [Unit] Description=Trojan-Go - An unidentifiable mechanism that helps you bypass GFW Documentation=https://p4gefau1t.github.io/trojan-go/ After=network.target nss-lookup.target [Service] User=root CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true ExecStart=/usr/local/trojan-go/trojan-go -config /usr/local/trojan-go/server.json Restart=on-failure RestartSec=10s LimitNOFILE=infinity [Install] WantedBy=multi-user.target
在server.json中ssl证书位置、dat文件位置最好是完整路径否则会报错
1 tls failed to load key pair
进而导致服务无法启动。
然后可以启动服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ➜ systemctl start trojan-go ➜ systemctl status trojan-go ● trojan-go.service - Trojan-Go - An unidentifiable mechanism that helps you bypass GFW Loaded: loaded (/etc/systemd/system/trojan-go.service; disabled; preset: enabled) Active: active (running) since Wed 2023-07-12 21:12:12 CST; 1s ago Docs: https://p4gefau1t.github.io/trojan-go/ Main PID: 18484 (trojan-go) Tasks: 5 (limit : 1569) Memory: 2.8M CPU: 11ms CGroup: /system.slice/trojan-go.service └─18484 /usr/local/trojan-go/trojan-go -config /usr/local/trojan-go/server.json Jul 12 21:12:12 vpn systemd[1]: Started trojan-go.service - Trojan-Go - An unidentifiable mechanism that helps you bypass GFW. Jul 12 21:12:12 vpn trojan-go[18484]: [INFO] 2023/07/12 21:12:12 trojan-go v0.10.6 initializing Jul 12 21:12:12 vpn trojan-go[18484]: [WARN] 2023/07/12 21:12:12 empty tls fallback port Jul 12 21:12:12 vpn trojan-go[18484]: [WARN] 2023/07/12 21:12:12 empty tls http response Jul 12 21:12:12 vpn trojan-go[18484]: [INFO] 2023/07/12 21:12:12 geoip:private loaded Jul 12 21:12:12 vpn trojan-go[18484]: [INFO] 2023/07/12 21:12:12 router client created