Alpine+V2Ray(+Nginx+PHP探针)让32M/64M的VPS跑起来
前几天入手了VMOcean的32M/64M的小鸡,其他的Linux玩不起来,只能整个alpine OS来折腾,效果还真别说,真不错!完全超出了0.5/1刀每年的预期。。。好了,废话不说了,开整。
准备工作:
VMOcean家的OS模板有点问题,使用的Alpine3.16默认是没有ssh的,需要自己来折腾一下
登录noVNC,使用的是root和邮件里的密码登录(注意输入的密码是否正确,noVNC实际的输入可能跟预期的不一样,最好先在用户名的位置把密码输入检查一下,以确保密码的正确性)
如果实在不行的话,可以重置一下OS,那里会提示让你重新设置root密码
默认已经用root账号登录系统了
安装使用dropbear,一个轻量级的ssh服务器端,直接运行下面的命令,不需要额外的配置,就可以用root登录了。
#apk add dropbear && rc-update add dropbear && rc-service dropbear start
安装openssh-server,这个比dropbear要稍微麻烦一点点儿。完全看个人喜好,dropbear和openssh-server二选一就成了。
#apk add openssh-server && rc-update add sshd (不熟的话,可以一个一个运行,熟悉一下运行输入的结果)
#echo "PermitRootLogin yes">>/etc/ssh/sshd_config
#rc-service sshd start
#安装ssh-server和将ssh加到默认启动的列表里,这样系统重启后,ssh也会默认启动
#ssh默认的配置是不允许root账号直接登录的,需要如此处理一下,或者自己到/etc/ssh/sshd_config文件里找到对应的选项进行编辑
#启动ssh服务,现在就可以通过putty或者其他的客户端,通过默认提供的IPv4:Port或者IPv6默认端口进行连接。官方提供的IPv4端口计算的方法
(PS:开始使用的命令是apk add openssh,这个默认会把ssh的client端也给安装上,看看自己的内存,还是把能不安装的都去除掉吧。)
准备工作完事,现在可以在putty或者其他的ssh客户端里开始折腾了。。。
v2ray安装:
#apk add v2ray
#rm /etc/v2ray/config.json
#vi /etc/v2ray/config.json
在alpine里,v2ray可以直接命令安装,默认的配置文件可以直接删除,然后把自己想用的配置文件放进去(vi命令运行完毕后,复制自己配置文件内容,键盘按下字母i,鼠标右键,内容复制完毕;键盘按下ESC,然后输入:wq,回车)。有些ssh客户端有文件传输的功能,也可以直接把配置文件编辑完毕后上传上去。
配置文件1,直接使用443端口+WS,套CF:
{
"inbounds": [
{
"port": 443,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "UUID-xxx",
"alterId": 0
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "localhost",
"certificates": [
{
"certificateFile": "/v2/cert/localhost.crt",
"keyFile": "/v2/cert/localhost.key"
}
]
},
"wsSettings": {
"path": "/Path/",
"headers": {}
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
如果自己手上没有可用UUID的话,可以通过v2ctl uuid来生成一个随机的UUID(v2ray 4.x的版本,需要v2ctl来执行;最新的5.x版本里,生成随机UUID的工作可以通过v2ray来完成)
# v2ctl uuid
67c5d2a9-fa63-ed5f-4c00-a1084d1ccb9f
v2ray 5.x
# v2ray uuid
9c714576-ef94-dc32-ac33-308be673359e
标红的位置需要自己的信息;域名和证书,需要自己来搞定。如果自己手里有有效的证书,可以直接使用有效的域名和证书;也可以自签名一个证书。
mkdir -p /v2/cert && openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /v2/cert/localhost.key -out /v2/cert/localhost.crt
贴一个自己用的100年的自签名的命令,不建议在alpine里直接运行,毕竟还需要安装openssl,不给小鸡添加压力了,直接在其他的环境里运行并备份或者复制到alpine小鸡里。上面的标红位置自己DIY就成了。反正路径、文件名一致就成了。
CloudFlare里,在域名domain-name里加个aaaa记录,启用CDN,ssl的加密模式设置为Full就可以了。本文里使用的是自签名+CF的SSL加密模式Full,完全可以在domain1-name里,加条同样的aaaa记录,然后在domain1-name里像domain-name一样玩耍。无感在CF多个域名里来回切换。
如果你能保证证书有效性,也可以将SSL加密模式设置成Full (strict)。
对了,CF提供15年的CF自用证书,上文提到的证书文件,也完全可以替换成CF的。
测试:
#rc-service v2ray start
#rc-service v2ray status
启动v2ray并查看运行状态
最后在浏览器里访问https://domain-name/Path/,返回Bad Request就说明v2ray配置成功了。
配置文件2,需要Nignx、或者其他的程序反代:
config.json的配置文件
{
"inbounds": [
{
"port": 10000,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "UUID-xxx",
"alterId": 0
}
]
},
"streamSettings": {
"network": "ws",
"security": "",
"wsSettings": {
"path": "/Path/",
"headers": {}
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
同样,标红的位置需要换成自己的(这个配置文件,也可以作为vmess裸奔的配置,在端口10000上裸奔)
#rc-service v2ray start
#rc-service v2ray status
启动v2ray并查看运行状态
PS: 这个配置文件里,没有指定listen IP地址,默认是监控所有IP的10000端口,如果需要的话,可以添加listen IP("listen":"127.0.0.1",)的信息。
安装nginx+php-fpm(用于网站+php单机探针)
apk add php-fpm && rc-update add php-fpm8 && rc-service php-fpm8 start
安装个php-fpm就能保证php探针运行了
apk add nginx
rm /etc/nginx/http.d/default.conf
vi /etc/nginx/http.d/default.conf
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
ssl_certificate /v2/cert/localhost.crt;
ssl_certificate_key /v2/cert/localhost.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
error_log /dev/null;
access_log /dev/null;
root /v2/www;
index index.html index.php;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+AESGCM:EDH+AESGCM:AES256+EDH;
ssl_prefer_server_ciphers on;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location /ip {
default_type text/plain;
return 200 "Your IP address is: $remote_addr";
}
location /Path/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
error_log /dev/null;
access_log /dev/null;
root /v2/www;
index index.html index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location /ip {
default_type text/plain;
return 200 "Your IP address is: $remote_addr";
}
location /Path/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
server {
listen 12345 default_server;
listen [::]:12345 default_server;
error_log /dev/null;
access_log /dev/null;
location / {
default_type text/plain;
return 200 "Your IP address is: $remote_addr";
}
location /Path/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
对于443和80端口,我把网站的根目录设置成/v2/www了,这个需要按照实际情况来编辑成自己的;把index.html或index.php作为首页,php单机探针文件也需要放在网站根目录,也可直接将探针的php文件名修改成index.php让其作为首页显示。最后在那个12345端口上,可以换成系统给分配的IPv4端口,根据自己的需求、结合上面的80和443进行DIY,这个去除了php配置,主页只显示一个字符串Your IP address is: xxxxx。
PS:配置文件里直接是default_server,就是为了一劳永逸,不是标准的做法;如果使用正常的域名和签名,就需要把server_name等啥的都给设置上。
最后运行
rc-update add nginx && rc-service nginx start
rc-service v2ray status && rc-service nginx status
最后看一下v2ray和nginx是否正常运行。
现在可以直接通过浏览器访问网站了。(某些情况下,可能需要一个扶墙的环境)测试v2ray:
浏览器里访问https://domain-name/Path/,http://domain-name/Path/或者http://ip-address:12345/Path/返回Bad Request就说明v2ray配置成功了。
放只32M的小鸡,vmess的连接就不放了
https://vm.maverick.tk/tz1.php
alpine小鸡的更新重启命令:
apk update && apk upgrade && sync && reboot
(32M的小鸡直接运行可能会失败,可以将一些服务给停掉然后再运行)
rc-service v2ray stop && rc-service nginx stop && rc-service php-fpm8 stop && apk update && apk upgrade && sync && reboot
刚才发现alpine3.17发布了,再贴点命令,来升级alpine版本。
apk update && apk upgrade alpine-keys
sed -i 's/v3.1./v3.17/g' /etc/apk/repositories
apk upgrade -a
尽情折腾吧,少年!
以下内容跟alpine无关。。。。。。
PS:关于v2ray的 client需要主意一下,alpine3.16内置的那个v2ray版本比较低,手机上的最新v2rayNG无法使用,不过SagerNet可以正常使用;Window上的v2rayN,注意修改一下内核,使用SagerNet或者v2fly的内核(非v2fly_v5)。
v2ray linux上最新的v4版本的一键安装命令如下:
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) --version v4.45.2
systemctl enable v2ray && systemctl start v2ray
或者分解开为:
curl -L -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
bash install-release.sh --version v4.45.2
systemctl enable v2ray && systemctl start v2ray
我再贴一下linux里的client端用的配置文件吧
v2ray运行的配置文件放在这里
/usr/local/etc/v2ray/config.json
{
"inbounds": [
{
"port": 1080,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
},
{
"port": 1081,
"protocol": "http",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"mux": {
"enabled": true,
"concurrency": 8
},
"protocol": "vmess",
"streamSettings": {
"wsSettings": {
"path": "/Path/",
"headers": {
"host": "domain-name"
}
},
"tlsSettings": {
"serverName": "domain-name",
"allowInsecure": false
},
"security": "tls",
"network": "ws"
},
"settings": {
"vnext": [
{
"address": "CF-DIY-Domain",
"users": [
{
"encryption": "none",
"id": "UUID-XXX",
"level": 0
}
],
"port": 443
}
]
}
}
]
}
标红的地方需要换成自己的,CF-DIY-Domain那里,是可以换成CF自选IP或者其他优质的CF域名;至于为啥整个虚拟机来运行v2ray客户端,那是因为主机可能某些原因被安装一些监控的软件,直接放在linux虚拟机里,安全性在理论上是会多一些,毕竟linux虚拟机,自己装的,一般情况下其他人是看不到里面是些啥的。
补充:
Alpine从3.16升级到3.17后,v2ray可能会出现莫名的crashed,启动不起来,检查了下,升级的过程中,v2ray版本4.45.0-r5 -> 5.1.0-r2,配置文件改动比较大,需要修改一下/etc/init.d/v2ray文件,然后重启v2ray就行了。(PS:试了下把我的Alpine从3.16升级到3.17,v2ray的init.d文件也修改完毕;试了下手机客户端,v2rayNG依旧不好用;SagerNet依旧好用!PC端:试了下最新的v2rayN v6.6,xray最新内核不好用,其余三个(v2fly, SagerNet, v2fly_v5)内核好用。)
#vi /etc/init.d/v2ray
#!/sbin/openrc-run
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
V2_CONFIG="/etc/v2ray"
V2_PIDFILE="/run/v2ray.pid"
V2_LOG="/var/log/v2ray.log"
depend() {
need net
}
checkconfig() {
if [ ! -f ${V2_CONFIG} ]; then
ewarn "${V2_CONFIG} does not exist."
fi
}
start() {
checkconfig || return 1
ebegin "Starting V2ray"
ebegin "Log File : ${V2_LOG}"
start-stop-daemon --start \
-b -1 ${V2_LOG} -2 ${V2_LOG} \
-m -p ${V2_PIDFILE} \
--exec /usr/bin/v2ray run -d ${V2_CONFIG}
eend $?
}
stop() {
ebegin "Stopping V2ray"
start-stop-daemon --stop -p ${V2_PIDFILE}
eend $?
}
红字部分修改自己修改的,正常的话v2ray run后面需要加-c或者-config /etc/v2ray/config.json;但不知什么原因,一直出错,所以修改一下,使用run -d,直接指向/etc/v2ray文件夹,会直接加载此目录下的所有json文件;你可以清空这个目录,只保留config.json文件,最后执行下面的命令,重启v2ray,查看状态
PS:如果一切运行OK,可以将篮字变成/dev/null,不记录日志,减少小鸡负担
rc-service v2ray restart && rc-service v2ray status
PS:升级Alpine后,Nginx里的php探针有可能会失效,检查了一下,是php-fpm版本变化了,处理方式如下。大版本升级过程中,如果其他软件有类似的情况,也可以参考解决。
rc-update del php-fpm8 && rc-update add php-fpm81 && rc-service php-fpm81 start
评论
发表评论