前言
涉及软件工具及站点:Xray、frp、Xray-script、nginx、frps-onekey。
本文章演示环境为全新安装的 unbuntu20.04LTS。
简单安装
本文使用大佬配置好的安装脚本Xray-script 和 frps-onekey,安装过程比较无脑,不再赘述。
Xray-tls-web安装
比较需要注意的是,域名证书。如果请求的是泛域名,就本人使用,并没有成功。只能忽略此错误,而后手动添加域名DNS服务商提供的API,以此申请证书。最后在配置文件中,替换证书路径。如何用DNS服务商解析API来申请证书,则建议百度google。
BBR方面,因为Ubuntu20.04内核较新,自带BBR,所以只要开启即可。
本人使用的代理配置是vless+xtls。
web方面,没有特别选择网盘等,简单个人页面即可。web这些后面都是可以自己折腾,安装时的选择并不是很重要。
frp
服务器端frps,安装因为脚本的原因,一路填好信息即可。需要注意的是,443端口分配了Xray,80给了Nginx,设置时避开这两个端口。额外,为安全起见,监听地址可以只监听本地。因为frp的流量之后都会经过nginx转发,frp并不需要监听外来的请求。
安装frp客户端,如果是windows,github页面有编译好的release,下载下来,配置frpc.ini
即可。这里简单写个示例,完整示例可查看frpc_full.ini
,具体信息可以查看官方说明。
# frpc configuration
[common]
server_addr = 1.1.1.1 #填写服务器地址
server_port = 111 #服务器端口
token = abcdefg #认证信息
log_file = ./frpc.log #日志
log_level = trace #日志细节程度
log_max_days = 3 #日志保留近三天
tcp_mux = true #tcp端口复用
protocol = kcp #协议
user = Name #用户名
admin_addr = 2.2.2.2 #本地管理frp的地址
admin_port = 222 #本地管理账号
admin_user = admin
admin_pwd = admin
tls_enable = true #通信使用tls加密
tls_cert_file = xxxx-chain.pem
tls_key_file = xxxx-key.pem
tls_server_name = xxx.xxx
[xxxx] #别名,用于区分
type = http #http协议
local_ip = 127.0.0.1 #本地代理地址
local_port = 80
custom_domains = xxx.magicalex.top #自定义域名,此域名相当于nginx的server name,可用于分流
use_compression = true #启用压缩
# 注释符号
[ccc]
type = http
local_ip = 127.0.0.1
local_port = 12083
custom_domains = ccc.magicalex.top
http_user = MagicAlex #启用简单认证,http协议独有
http_pwd = AlexSen
[vvvv]
type = http
local_ip = 127.0.0.1
local_port = 443
custom_domains = vvv.magicalex.top
plugin = http2https #插件,将本地https通信转化为http
plugin_local_addr = 127.0.0.1:443
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
[bbb]
type = tcp #协议tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 5000
use_encryption = true #启用加密。启用tls时,此项失效。
因为本人不使用xtcp等协议,此中没有配置。有需求具体可以看官方示例文件。frp还有很多功能未启用,可查阅官方说明。
Notice: 暴漏内网服务是比较危险的行为,不建议http裸奔。我曾经实验使用Xray代替frp,只用Xray,实现内网代理和外网代理,但是,Xray Vless的内网效率感人。
nginx配置
在开始动配置文件前,简单说说xray-nginx脚本安装完成后,配置文件路径。/usr/local/nginx/conf.d/xray.conf
/usr/local/nginx/html/ #网站目录
/usr/local/etc/xray/config.json
Xray监听的443,nginx监听的80。脚本配置的文件,nginx将80流量301定向到https,443流量由Xray回落给nginx,nginx再定向到https主页。这里,比如frps的http穿透端口是9999,设置域名是q.q.com
。
#file xray.conf
server { #访问q.q.com 80的流量定向到https
listen 80;
listen [::]:80;
server_name q.q.com;
return 301 https://$host$request_uri;
}
server { #其余80的请求定向到主页https
listen 80 reuseport default_server;
listen [::]:80 reuseport default_server;
return 301 https://www.q.com;
}
server { #访问q.q.com的https流量,被Xray回落在此,转发给本地frp端口
listen unix:/dev/shm/nginx/default.sock;
listen unix:/dev/shm/nginx/h2.sock http2;
server_name q.q.com;
location / {
proxy_pass http://127.0.0.1:9999;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
proxy_set_header X-Forwarded-Proto http;
}
}
server { #脚本的默认配置,回落的流量,将请求www.q.com的(包括301定向来的),提供以下配置的web服务
listen unix:/dev/shm/nginx/default.sock;
listen unix:/dev/shm/nginx/h2.sock http2;
server_name www.q.com;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
root /usr/local/nginx/html/www.q.com;
error_page 404 /404.html;
}
server { #其余未被识别的流量,一律定向为主页www.q.com
listen unix:/dev/shm/nginx/default.sock default_server;
listen unix:/dev/shm/nginx/h2.sock http2 default_server;
return 301 https://www.q.com;}
经以上配置后,重启相关服务,一个内网服务即被穿透出来。访问https://q.q.com
即可。当然,自己需要将域名解析好。
如果想穿透https,将上述proxy_pass
地址端口相应更改,proxy_set_header X-Forwarded-Proto http
修改为https
。
Notice:如果穿透有大大小小的问题,建议多尝试几种搭配,比如http改为https,本地https转为http,本地用nginx反代等。不同的服务在运行时有不同的需求,需因地制宜解决。服务端除了把frp反代出来,同样的,还能将其他的运行在服务器本地的服务代理出来。
结语
对一些访问网络需求不高的服务,自己搭建一个更安全的平台,实用性也不错。