多协议多用户的v2ray管理面板(sprov-ui)

支持的功能

  • 系统运行状态监控
  • 多协议、多用户管理
  • 禁用、启用单个账号
  • 支持设置监听的 IP(多 IP 服务器下)
  • 流量统计(支持所有协议)

支持的 v2ray 协议

  • vmess(v2ray 特色)
  • shadowsocks(经典 ss)
  • mtproto(Telegram 专用)
  • dokodemo-door(端口转发)
  • socks(socks 4、socks 4a、socks 5)
  • http(http 代理)

支持的 vmess 传输配置

  • tcp
  • kcp + 伪装
  • ws + 伪装 + tls

一、sprov-ui安装&升级

推荐内存在256MB及以上的vps安装,在低内存的vps下可能运行不佳,你可以试试设置虚拟内存来缓解内存压力。

支持的系统,最好是纯净版的系统,在精简版的系统中可能会安装失败:

  • CentOS 7(推荐)
  • Ubuntu 16
  • Ubuntu 18
  • Debian 8
  • Debian 9

一键安装&升级命令

面板已内置升级功能,每 30 分钟从 Github 检测一次

wget -O install.sh -N --no-check-certificate https://blog.sprov.xyz/sprov-ui.sh && bash install.sh
wget -O install.sh -N --no-check-certificate https://github.com/sprov065/sprov-ui/raw/master/install.sh && bash install.sh

以上两条命令皆可,两者是一样的,只需要运行一个,如果其中一个有错误,可以运行另外一个。

使用以上一键命令安装sprov-ui,如果你已安装过,也可以使用上述命令进行升级到更新的版本。

稍等片刻,该脚本会安装Java环境、v2ray(如果已安装则会强制升级到最新版)、以及关闭防火墙,安装过程中会让你输入面板监听端口、登录用户名和密码,推荐自己定义,不使用默认的。

安装v2ray面板

手动安装&升级

由于系统的种类多,各个商家也可能会定制自己的Linux系统,我没办法照顾到所有的系统,所以一键脚本有可能会出现安装失败的情况,如果多次安装都失败了,请参照以下的手动安装教程。

安装Java环境与curl

此步若安装Java环境失败,请自行百度你的系统+安装Java 8,本软件需要Java 8(也称Java 1.8)及以上版本才能运行。

安装完成后,使用 /usr/bin/java -version 命令查看Java版本,确保是1.8版本及以上。

CentOS 7+

yum install java-1.8.0-openjdk curl -y

Ubuntu 16+ / Debian 8+

apt install default-jre curl -y

安装v2ray

已安装则会强制升级到最新版

bash <(curl -L -s https://install.direct/go.sh) -f

关闭防火墙

如果你会自己管理防火墙,可以按照自己的方式来。有些商家可能会在服务器外又设置一道防火墙,也需要关闭,具体每个商家管理方式都不一样,请自行解决。

CentOS 7+

systemctl stop firewalld systemctl disable firewalld

Ubuntu 16+

ufw disable

Debian 8+

iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F

创建sprov-ui配置文件

请自行修改命令中的端口、用户名、密码,默认是80、sprov、blog.sprov.xyz

mkdir /etc/sprov-ui -p echo "port=80" > /etc/sprov-ui/sprov-ui.conf echo "username=sprov" >> /etc/sprov-ui/sprov-ui.conf echo "password=blog.sprov.xyz" >> /etc/sprov-ui/sprov-ui.conf

下载sprov-ui软件包

mkdir /usr/local/sprov-ui -p last_version=$(curl --silent "https://api.github.com/repos/sprov065/sprov-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') wget -N --no-check-certificate -O /usr/local/sprov-ui/sprov-ui.jar https://github.com/sprov065/sprov-ui/releases/download/${last_version}/sprov-ui-${last_version}.jar

创建sprov-ui.service文件

直接一次性执行

echo "[Unit]" > /etc/systemd/system/sprov-ui.service echo "Description=sprov-ui Service" >> /etc/systemd/system/sprov-ui.service echo "After=network.target" >> /etc/systemd/system/sprov-ui.service echo "Wants=network.target" >> /etc/systemd/system/sprov-ui.service echo "" >> /etc/systemd/system/sprov-ui.service echo "[Service]" >> /etc/systemd/system/sprov-ui.service echo "Type=simple" >> /etc/systemd/system/sprov-ui.service java_cmd="/usr/bin/java" echo "ExecStart=${java_cmd} -jar /usr/local/sprov-ui/sprov-ui.jar" >> /etc/systemd/system/sprov-ui.service echo "" >> /etc/systemd/system/sprov-ui.service echo "[Install]" >> /etc/systemd/system/sprov-ui.service echo "WantedBy=multi-user.target" >> /etc/systemd/system/sprov-ui.service systemctl daemon-reload

至此,sprov-ui安装完毕。

手动升级

使用以下命令重新下载软件包就能升级了,升级完成后记得重启sprov-ui

last_version=$(curl --silent "https://api.github.com/repos/sprov065/sprov-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') wget -N --no-check-certificate -O /usr/local/sprov-ui/sprov-ui.jar https://github.com/sprov065/sprov-ui/releases/download/${last_version}/sprov-ui-${last_version}.jar

安装谷歌bbr

参考这篇文章:谷歌bbr – tcp加速工具

二、sprov-ui使用

sprov-ui使用systemd来管理,以下是常用的命令,使用这些命令时,可能不会输出任何信息,也可能会输出一些信息,都是正常的。如果输出了错误信息,比如包含了error等字样,才代表出错了,需要排查错误。

systemctl start sprov-ui      # 启动sprov-ui systemctl restart sprov-ui    # 重启sprov-ui systemctl stop sprov-ui       # 关闭sprov-ui systemctl status sprov-ui     # 查看sprov-ui运行状态 systemctl enable sprov-ui     # sprov-ui开机启动 systemctl disable sprov-ui    # 取消sprov-ui开机启动

启动sprov-ui后,在浏览器地址栏中输入你的服务器IP加冒号端口号,切记是英文的冒号,不是中文的冒号,访问sprov-ui面板。

使用你设置的用户名和密码登录sprov-ui面板。

登录

登录后可以看到你的服务器的基本状态以及 v2ray 的运行状况。

此页面显示的是系统的状态,比如【已运行】表示的是服务器已运行的时间,而不是 v2ray 运行的时间。【网络】和【流量】显示的是服务器外网的网络速度和流量,如果你发现面板统计了内网的流量,请告知我你的系统版本和所有网卡名称,我将作出修正。

系统运行状态

账号列表可以看到你的 v2ray 账号,在这里你可以选择添加多个账号,或者删除、修改账号,添加、修改、删除账号之后记得点击【重启】来使配置生效。

【重置】是重置流量的功能,每个账号可单独重置流量,最上面的【重置】按钮可重置所有账号的流量。

账号列表

三、客户端使用

可以在这篇文章的第五章看起,包括Windows、macOS、安卓、iOS的教程。

四、常见问题

sprov-ui启动失败:Address already in use

这个问题是因为面板的监听端口被占用了,换个端口即可。

sprov-ui启动失败:port out of range:xxxx

面板监听的端口超出正常范围,正常范围是1-65535,换个端口即可。

vmess 协议的账号连不上,其它的账号都连得上,端口也是通的

这是因为你的服务器时间和本地时间相差过大,vmess 协议要求服务器的 UTC 时间和本地 UTC 时间相差不超过 90 秒,服务器与本地的时区不一样没关系,但是分钟数要相同,请自行修改服务器时间。

所有账号都连不上,或者刚刚添加/修改的账号连不上

添加、删除、修改账号之后都需要重启 v2ray 才会生效新的配置,点击网页上的【重启】按钮即可,不是【重启面板】。还有确保你的端口是通的,防火墙都放行了。

开启 v2ray api 失败:xxxx

这个错误的原因一般就是你的 v2ray 配置文件格式过老了,v2ray 的 v4.1 版本开始启用了新的配置文件格式,本面板只支持 v4.1 版本之后的配置文件。

通用解决方法:

  • 先备份好你的 v2ray 节点信息
  • 删除 /etc/v2ray/config.json 文件
  • 重新使用此命令安装 v2ray:bash <(curl -L -s https://install.direct/go.sh) -f
  • 重启面板

五、高级操作

使用域名

首先你需要一个域名,并将域名解析到你 vps 的 IP,直接使用域名加端口号登录面板即可,无需其它配置。

sprov-ui 面板配置文件

面板配置文件在 /etc/sprov-ui/ 文件夹下,包含两个文件,一个是 sprov-ui.conf,一个是 v2ray-extra-config.json。

sprov-ui.conf

port=80

username=sprov

password=blog.sprov.xyz

此文件配置了 sprov-ui 的端口、用户名、密码,可以随意修改,留空则使用默认配置。配置错误会导致面板启动失败,例如:port=111111(非法端口号)。

v2ray-extra-config.json

{

    "disabled-inbounds": [],

    "inbounds": []

}

此文件为 v2ray 配置文件的扩展,为一个 json 文件,包含两个属性:inbounds、disabled-inbounds。

inbounds 为一个数组,包含若干个 inbound,主要记录流量数据,每个 inbound 的格式如下:

{

    "tag": "",      // tag 标识,不能为空

    "downlink": 0,  // 下行流量,单位 Byte

    "uplink: 0      // 上行流量,单位 Byte

}

disabled-inbounds 为一个数组,包含若干个 inbound,记录被禁用的 inbound,每个 inbound 都是一个完整的 v2ray inbound,并且还包含流量数据。

面板服务器迁移

面板的服务器迁移很简单,首先需要备份面板配置文件和 v2ray 配置文件,分别是:/etc/sprov-ui/ 文件夹下所有文件,/etc/v2ray/config.json,如何备份请自行解决。

然后在新服务器上重新安装面板,之前备份的文件覆盖掉现有的,最后启动或重启面板即可。

六、总结

以上就是我花了几天来开发的 v2ray 面板,名字叫 sprov-ui,如果你在使用中遇到了问题,或者你有更多的建议,推荐加入 Telegram 群组讨论,也可以在下方评论,或者在 Github 提 issue。

问问题前请先在评论区和 Github 查看别人是否与你遇到了同样的问题,如果尝试了所有解决方案仍然不行,那么请仔细描述你所遇到的问题,将你的系统版本(CentOS 7 ?Ubuntu 16 ?)、sprov-ui 的状态信息、v2ray 的状态信息等等所有相关的信息发上来,不要太多,选取重要的即可,不要就说一句“不行”、“不可以”、“没反应”,这样叫我怎么解决呢。

提问格式,根据具体问题,可适当去除不相关的内容:

  • 简短描述所遇到的问题:
  • 使用的系统:
  • sprov-ui 状态信息:
  • v2ray 状态信息:
  • v2ray 配置内容(cat /etc/v2ray/config.json):
  • 使用的浏览器:

感谢你的使用。

V2Ray 的工作机制

这篇文章是解释 V2Ray 的工作机制,推荐各位新手朋友仔细阅读一下。了解V2ray的工作原理,有利于你更好的使用这个工具。

V2Ray 单服务器模式

V2ray和其它的网络代理工具一样,你需要在一台配置了 V2Ray 的服务器,然后在自己的设备上安装 V2Ray 客户端,然后即可流畅地访问互联网。

一个 V2Ray 服务器可同时支持多台设备,使用不同的代理协议访问。同时,经过合理的配置,V2Ray 可以识别并区分需要代理和不需要代理的流量,直连的流量不需要绕路。

V2Ray 桥接模式

如果你不想在每一台设备上都配置路由,你也可以设置一台中转服务器,用于接收客户端发来的所有流量,然后在服务器中进行转发判断。

V2Ray 工作原理

在配置 V2Ray 之前,不妨先来看一下 V2Ray 的工作原理,以下是单个 V2Ray 进程的内部结构示意图。多个 V2Ray 之间互相独立,互不影响。

  1. 需要配置至少一个传入协议(Inbound)和一个传出协议(Outbound)才可以正常工作。协议列表(V2Ray 支持以下协议: Blackhole、Dokodemo-door、Freedom、HTTP、Shadowsocks、Socks、VMess)
  2. 传入协议通常可以配置用户认证,如 ID 和密码等;
  3. 传入协议收到数据之后,会交给分发器(Dispatcher)进行分发;
  4. 传入协议负责与客户端(如浏览器)通信:
  5. 传出协议负责将数据发给服务器,如另一台主机上的 V2Ray。
  6. 当有多个传出协议时,可以配置路由(Routing)来指定某一类流量由某一个传出协议发出。
  7. 路由会在必要时查询 DNS 以获取更多信息来进行判断。

nginx 模块讲解

1. 通用配置选项:

–prefix= 指定Nginx的安装路径,所有其他的路径都要依赖于该选项

–sbin-path= 指定Nginx二进制文件的路径。如果没有指定,那么这个路径将依赖于–prefix选项

–conf-path= 指定Nginx的配置文件的路径,如果在命令行没有指定配置文件,那么将会通过这里指定路径。

–error-log-path= 指定错误日志文件路径,Nginx将会往里面写入错误日志文件,除非有其它的配置。

–pid-path= 指定的Nginx master进程的PID文件位置,通常在/var/run下

–lock-path= 共享存储器互斥锁文件的路径

–user= worker进程运行的用户

–group= worker进程运行的组

–with-file-aio. 为FreeBSD4.3 +和linux 2.6.22 +系统启用异步I/O

–with-debug 这个选项用于启用调试日志,在生产环境的系统中不推荐使用

2. 邮件代理的配置选项:

–with-mail 该选项用于启用Mail模块,该模块默认没有被激活

–with-mail_ssl_module 为了代理任何一种类型的使用SSL/TLS的Mail,激活该模块

–without-mail_pop3_module 在启用Mail模块后,单独地禁用pop3模块

–without-mail_imap_module 再启用mail模块后,单独地禁用IMAP模块

–without-mail_smtp_module 在启用mail模块后,单独地禁用smtp模块

–without–http 该选项将完全禁用http模块,如果你只想支持

3. 指定路径的配置选项:

–without-http_perl_module Nginx配置能够使用扩展使用Perl代码,这个选项启用这个模块(此模块会降低性能)

–without-perl_module_path= 对于额外嵌入的Perl模块,使用该选项指定该Perl解析器的路径,也可以通过配置选项来指定Perl模块解析器的位置

–without—perl= 如果在默认路径中没有找到Perl,那么指定Perl的路径

–http-log-path= Http访问日志的默认路径

–http-client-body-temp-path= 从客户端收到请求后,该选项设置的目录用于作为请求体临时存放的目录。如果WebDAV模块启用,那么推荐设置该路径为同一文件系统上的目录作为最终的目的地

–http-proxy-temp-path= 在使用代理后,通过该选项设置存放临时文件路径

–http-fastcgi-temp-path= 设置FastCGI临时文件的目录

–http-uwsgi-temp-path= 设置uWSGI临时文件的目录

–http-scgi-temp-path= 设置SCGI临时文件的目录

4. 各种模块配置选项:

–with-http_ssl_module 如果需要对流量进行加密,可以使用该选项,在URLs中开始部分将会是https(需要OpenSSL库)

–with-http_realip_module 如果你的Nginx在七层负载均衡器或者是其他设备之后,它们将http头中的客户端IP地址传递,那么你将会需要启用这个模块。在多个客户处于一个IP地址的情况下使用

–with-http_addition_module 这个模块作为输出过滤器,使你能够在请求经过一个location前或者后时在该location本身添加内容

–with-http_xslt_module 该模块用于处理XML响应转换,基于一个或者多个XSLT格式(需要libxml2和libxslt库)

–with-http_image_filter_module 该模块被作为图像过滤器使用,在将图形投递到客户之前进行处理(需要libgd库)

–with-http_geoip_module 使用该模块,能够设置各种变量以便在配置文件中区段使用,基于地理位置查找客户端IP地址(需要MaxMfind GeoIP库和相应的预编译数据库文件)

–with-http_sub_module 该模块实现了替代过滤,在响应中用一个字符串替代另一个字符串

–with-http_dav_module 启用这个模块将激活使用WebDAV的配置指令。注意:这个模块也只在有需要使用的基础上启用,如果配置不正确,它将带来安全问题。

–with-http_flv_module 如果需要提供Flash流媒体视频文件,那么该模块将会提供伪流媒体

–with-http_mp4_module 这个模块支持H.264/AAC文件伪流媒体

–with-http_gzip_module 当被调用的资源没有.gz结尾格式的文件时,如果想支持发送预压缩版本的静态文件,那么使用该模块

–with-http_gunzio_module 对应不支持gzip编码的客户,该模块用于为客户解压缩预压缩内容

–with-http_random_index_module 如果你想提供从一个目录中随机选择文件的索引文件,那么这个模块需要被激活

–with-http_secure_link_module 该模块提供了一个机制,它会将一个哈希值链接到一个URL中,因此,只有那些使用正确的密码能够计算链接

–with-http_stub_status_module 启用这个模块后会收集Nginx自身的状态信息。输出的状态信息可以使用RRDtool或类似的东西来绘制成图

FastAdmin – 基于ThinkPHP5和Bootstrap的极速后台开发框架

介绍

FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。

主要特性

  • 基于Auth验证的权限管理系统
    • 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置
    • 支持单管理员多角色
    • 支持管理子级数据或个人数据
  • 强大的一键生成功能
    • 一键生成CRUD,包括控制器、模型、视图、JS、语言包、菜单等
    • 一键压缩打包JS和CSS文件,一键CDN静态资源部署
    • 一键生成控制器菜单和规则
    • 一键生成API接口文档
  • 完善的前端功能组件开发
    • 基于AdminLTE二次开发
    • 基于Bootstrap开发,自适应手机、平板、PC
    • 基于RequireJS进行JS模块管理,按需加载
    • 基于Less进行样式开发
    • 基于Bower进行前端组件包管理
  • 强大的插件扩展功能,在线安装卸载升级插件
  • 通用的会员模块和API模块
  • 共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证
  • 二级域名部署支持,同时域名支持绑定到插件
  • 多语言支持,服务端及客户端支持
  • 强大的第三方模块支持(CMS博客文档生成)
  • 整合第三方短信接口(阿里云、腾讯云短信)
  • 无缝整合第三方云存储(七牛、阿里云OSS、又拍云)功能
  • 第三方富文本编辑器支持(Summernote、Tinymce、百度编辑器)
  • 第三方登录(QQ、微信、微博)整合
  • Ucenter整合第三方应用

安装使用

https://doc.fastadmin.net

在线演示

https://demo.fastadmin.net

用户名:admin

密 码:123456

提 示:演示站数据无法进行修改,请下载源码安装体验全部功能

界面截图

控制台

问题反馈

在使用中有任何问题,请使用以下联系方式联系我们

交流社区: https://forum.fastadmin.net

QQ群: 636393962(满) 708784003(满) 964776039(3群)

Email: (karsonzhang#163.com, 把#换成@)

Github: https://github.com/karsonzhang/fastadmin

Gitee: https://gitee.com/karson/fastadmin

特别鸣谢

感谢以下的项目,排名不分先后

ThinkPHP:http://www.thinkphp.cn

AdminLTE:https://adminlte.io

Bootstrap:http://getbootstrap.com

jQuery:http://jquery.com

Bootstrap-table:https://github.com/wenzhixin/bootstrap-table

Nice-validator: https://validator.niceue.com

SelectPage: https://github.com/TerryZ/SelectPage

版权信息

FastAdmin遵循Apache2开源协议发布,并提供免费使用。

本项目包含的第三方源码和二进制文件之版权信息另行标注。

版权所有Copyright © 2017-2018 by FastAdmin (https://www.fastadmin.net)

All rights reserved。

Zcurd与Eova对比

都没实际项目用过,Zcurd读过源码,Eova读过文章,个人感觉几点差别:

1、界面
Eova界面做的不够精细。Zcurd更漂亮些,能看出作者更用心,更注重细节。

2、模式
快速开发一般有两种模式,一是引擎模式,就是按正常开发时的代码,向上抽取一层,实现动态化。 另一种是生成代码模式,根据一定配置,生成正常开发时的代码,基本功能都有了,可以手动上加上一些个性功能。

Eova采用的是引擎模式。Zcurd两种模式都支持,可以先用引擎模式,当不能满足业务要求时,生成出来手动改。这个设计确实化了不少心思。Eova虽说只有引擎模式,但支持的更多,单表、一对多表、树表等。

Eova有个比较好的设计,将动态设计分为 控件、组件、业务三层,组件由控件组装成,业务由组件构成,每层均可自由定制。理论上每种控件,每种组件,每种业务只实现一次,后续直接复用。这种设计比较好,是文档上说的,实际源码没看过。

3、学习成本
好像Zcurd更简单些,因为简单,所以简单。

体验地址
http://zcurddemo.duapp.com/login
git: https://git.oschina.net/515097842/zcurd

本观点出自zcurd技术交流1群。

TTL和DNS TTL的区别

什么是TTL?

  TTL是IP协议包中的一个值,指定数据报被路由器丢弃之前允许通过的网段数量。

在很多情况下数据包在一定时间内不能被传递到目的地。解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止地循环。转发IP数据包时,要求路由器至少将TTL减小1。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。

TTL值帮助我们大致的识别主机的操作系统类型:

UNIX及类UNIX操作系统ICMP回显应答的TTL字段值为255

Compaq Tru64 5.0 ICMP回显应答的TTL字段值为64

微软Windows NT/2K操作系统ICMP回显应答的TTL字段值为128

微软Windows 95操作系统ICMP回显应答的TTL字段值为32

特殊情况:

Linux Kernel 2.2.x&2.4.x ICMP回显应答的TTL字段值为64

FreeBSD 4.1,4.0,3.4;

Sun Solaris 2.5.1,2.6,2.7,2.8;

OpenBSD 2.6,2.7,

NetBSD

HP UX 10.20

ICMP回显应答的TTL字段值为255

Windows 95/98/98SE

Windows ME

ICMP回显应答的TTL字段值为32

Windows NT4 WRKS

Windows NT4 Server

Windows 2000

Windows XP

ICMP回显应答的TTL字段值为128

 

什么是DNS TTL值?

TTL(Time-To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。

合理设置域名TTL值:

1、增大TTL值,以节约域名解析时间

通常情况下域名解析记录是很少更改的。我们可以通过增大域名记录的TTL值让记录在各地DNS服务器中缓存的时间加长,这样在更长的时间段内,我们访问这个网站时,本地ISP的DNS服务器就不需要向域名的NS服务器发出解析请求,而直接从本地缓存中返回域名解析记录。

TTL值是以秒为单位的,通常的默认值都是3600,也就是默认缓存1小时。我们可以根据实际需要把TTL值扩大,例如要缓存一天就设置成86400。

2、减小TTL值,减少更换空间时的不可访问时间

更换域名空间时会对DNS记录进行修改,因为DNS记录缓存的问题,新的域名记录在有的地方可能生效了,但在有的地方可能等上一两天甚至更久才生效,只就导致有部分用户在一段时间内无法不可访问网站了。

  1.   为了尽可能的减小这个各地的解析时间差,合理的做法是:
  2.   先查看域名当前的TTL值。
  3.   修改TTL值为可设定的最小值,建议为60秒。
  4.   等待一天,保证各地的DNS服务器缓存都过期并更新了记录。
  5.   设置修改DNS解析到新的记录,这个时候各地的DNS就能以最快的速度更新到新的记录。
  6.   确认各地的DNS已经更新完成后,再TTL值设置成常用的值(如:TTL=86400)。

在电脑运行中,当你PING一个IP时,会出现一些数据,那么TTL=114代表什么意思?

  1.   TTL是一个ip协议的值,它告诉网络,数据包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。
  2.   TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。
  3.   不同操作系统的ttl初始值是不同的,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的默认TTL值为128,Win7系统的TTL值是64,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。
  4.   因此如果用户主机是win2000系统,用128-114=14,表示用户主机达到目标主机经过了14个路由器节点。

锐速&BBR究竟哪家强?

我以前也有想过这个问题,但是秉承着哪个容易安装我就选哪个的原则,基本上用的都是BBR,因为锐速对内核限制的很死……还有就是家庭网络下是否有必要在个人PC上使用锐速……

实验一:所以说到底哪家强

由于手里并没有太多的可以随便开的机子,而且测试实际上工作量挺大的,所以这次实验变量只设计了两个,并且样本数就一个(。

变量

网络优化

什么都不装

锐速

BBR

BBR魔改

相对于国内的网络环境

Vultr日本(低延迟低丢包)

Digital Ocean新加坡(高延迟高丢包)

测试方法

秉承着怎么方便怎么来的做法,我在CentOS 6.9系统下进行什么都不装和锐速的网络测试,在Ubuntu 16.04下进行BBR和BBR魔改的网络测试

网络测试有两部分:

1,使用ZBench-CN.sh进行测试

2,在深圳天威联通100M网络环境下进行H5网页测速

用到的代码:

  #CentOS 6.9锐速

  wget--no-check-certificate-O appex.sh https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh&&chmod+x appex.sh&&bash appex.sh install'2.6.32-642.el6.x86_64'

  #Ubuntu/Debian BBR

  wget--no-check-certificate-qO'BBR.sh''https://moeclub.org/attachment/LinuxShell/BBR.sh'&&chmod a+x BBR.sh&&bash BBR.sh-f

  #Ubuntu/Debian BBR魔改

  wget--no-check-certificate-qO'BBR_POWERED.sh''https://moeclub.org/attachment/LinuxShell/BBR_POWERED.sh'&&chmod a+x BBR_POWERED.sh&&bash BBR_POWERED.sh

  #ZBench-CN.sh测速脚本

  wget https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench-CN.sh&&bash ZBench-CN.sh

  #Docker一键安装脚本

  wget-qO-https://get.docker.com/|sh

  #H5网页测速Docker

  docker run-d-p 2333:80 ilemonrain/html5-speedtest:latest

测试结果

Vultr 日本(低延迟低丢包)
H5网页测速

  • 什么都不装
  • 锐速
  • BBR
  • BBR魔改

测速脚本

  • 什么都不装
  • 锐速
  • BBR
  • BBR魔改

Digital Ocean 新加坡(高延迟高丢包)

H5网页测速

  • 什么都不装
  • 锐速
  • BBR
  • BBR魔改

测速脚本

  • 什么都不装
  • 锐速
  • BBR
  • BBR魔改

结果分析

在测试过程中,我发现使用测试脚本得到的结果和实际想象偏差很大,而且就算在同样条件下测试两次得到的数据也有可能会有很大偏差,我觉得这可能是因为测速服务器在同时被多人通过脚本使用,因此无法独占测试出准确的结果

而H5测速是很直观的,能找到拥塞控制下达到的最大稳定速度,而单纯的脚本测速可能会因为测速文件不够大、拥塞控制慢开始过程太长并且测速是通过计算平均速度而导致最终结果不一定准确,所以我觉得还是从家庭宽带进行H5测速比较靠谱

然而这样样本数就很单一了(

可以推测:

1,这三种加速对高延迟高丢包的网络有极大的改善效果

2,BBR魔改确实比BBR的效果要好(魔改实际上是调整了原版BBR的配置参数)

在我目前所处的网络环境下,可以推测:

1,BBR魔改的效果要比锐速稍好

2,在低延迟低丢包的情况下,使用这三种网络优化手段可能反而会导致网络性能下降,但是下降并不明显

当然,并不是说测了下发现低延迟低丢包就不应该上加速,因为从国内到国外始终是无法避免网络高峰期出口拥堵的情况的,国外的机子推荐能上还是上了

总结,推荐还是上BBR魔改

无论是从体感角度和便利程度上考虑,我都觉得BBR魔改要优于锐速,并且锐速并不能用于OVZ,但是BBR可以

后话

我后来又尝试了在 Windows 服务器上装锐速与不装的区别

nazwa 的波兰服务器,往 Google 盘传文件,不装锐速是5MB/s,装锐速是18.5MB/s

相信这个结果十分明显了

实验二:个人PC有必要上锐速吗

锐速有Windows版,我只在国外Windows机子上用过,效果相当可以,但是并不知道如果在家庭网络环境下使用效果如何

测试方法

因为是在实验一之前临时想到的,所以并没有事先准备,直接让朋友用 nazwa 的波兰机子(高延迟低丢包)搭建了H5测速平台

仍然是在深圳天威联通100M网络环境下测速

测试结果

个人PC直连

个人PC装锐速并开启入向流量加速

结果分析

看到测试结果的时候我也是一脸懵逼的
我原来以为应该至少会有一点加速效果,然而事实上是速度反而慢了很多

接着我关掉了锐速,重新进行测试

确实,网速又回到了正常水平

但是我也有听朋友说他那里的网络下,开锐速访问日本VPS的速度会有很大提升

我猜测,在家用网络环境下使用锐速,效果应该和运营商、线路、目的地有关系,并且入向流量加速需要占用一点上传宽带,也有可能是天威上传宽带太小(3Mbps)的原因

因此并不能断定家用网络环境下使用锐速是好或者不好的,具体情况应该根据自己测试决定

Nginx 隐藏服务器名称和版本号

注:默认读者自己会安装nginx,不会的就搜一下怎么安装吧。说明一点。在make的时候可以使用make -j num这里面的num是你的cpu核心数。这样会快一点~~~意为以num个进程同时编译

首先先说为什么要隐藏吧。这张图应该能说明问题了吧。对,就是为了解决安全隐患才这样做。就算升级到最新版本,该不公开还是要不公开的好吧~~ Nginx的版本号主要在两个地方会有: 第一个是HTTP header,有个Server:nginx/1.x.x类似会暴露Web服务器所用软件名称以及版本号,这个也是大多数Web服务器最容易暴露版本号的地方,如下:

怎么验证呢?输入curl -I 你的域名就可以了
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Sun, 30 Sep 2018 05:11:14 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 30 Sep 2018 03:44:42 GMT
Connection: keep-alive
ETag: "5bb046aa-264"
Accept-Ranges: bytes

接着再说说这个版本号吧。 如果安装好的童鞋可以直接在nginx.conf中配置一下就可以隐藏了。配置什么呢? 在你使用的nginx配置文件中的http节点下添加server_tokens off;就可以隐藏了。 第二个地方是Nginx出错页面,比如404页面没有找到等,这是如果用户没有指定页面的话,那么Nginx自己的页面会有版本戳记。

1、打开Nginx主配置文件:nginx.conf,取消注释或添加配置语句。

http { # …省略一些配置

server_tokens off;   #默认是注释掉的

# …省略一些配置}

2、编辑php-fpm配置文件,如fastcgi.conf或fcgi.conf(这个配置文件名也可以自定义的,根据具体文件名修改):

找到:

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

改为:

fastcgi_param SERVER_SOFTWARE nginx;

重启nginx完成 reload可以不断业务重载配置,也可以考虑直接重启。 这样就完全对外隐藏了nginx版本号了,就是出现404、501等页面也不会显示nginx版本   既然版本号可以隐藏,那可不可以隐藏或修改nginx服务器的名称呢?答案是可以,修改或隐藏服务器名称需要修改源码nginx.h,nginx.h在src/core/目录下 。具体操作如下: 把下面两个宏的值修改为自己设定的值,例如”NGX”。 都改为 “” 即隐藏名称。

vim src/core/nginx.h

#define NGINX_VER "nginx/" NGINX_VERSION 改为 #define NGINX_VER "hart-edu" NGINX_VERSION
#define NGINX_VAR "NGINX" 改为 #define NGINX_VAR "hart-edu"

同理改版本号修改#define NGINX_VERSION 后面的值

#define NGINX_VERSION      "1.14.0"
注意事项

1. 在配置文件nginx.conf中不要使用server_tokens off命令, 因为如果设置了该命令,服务器名称就固定了。 如果配置了server_tokens off,在解析文件时 clcf->server_tokens值为0。见ngx_http_core_module.c 的server_token命令处理函数ngx_conf_set_flag_slot

if (ngx_strcasecmp(value[1].data, (u_char *) "on") == 0) {
    *fp = 1;
} else if (ngx_strcasecmp(value[1].data, (u_char *) "off") == 0) {
    *fp = 0;
}

修改u_char ngx_http_server_string[]

vim src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

if (clcf->server_tokens) {
	p = (u_char *) ngx_http_server_full_string;
	len = sizeof(ngx_http_server_full_string) - 1;
} else {
	p = (u_char *) ngx_http_server_string;
	len = sizeof(ngx_http_server_string) - 1;
}

vim src/http/ngx_http_special_response.c

 static u_char ngx_http_error_tail[] =
 "<hr><center>nginx</center>" CRLF
 "</body>" CRLF
 "</html>" CRLF
 ;

每次修改都要记得保存哟。 之后重新编译安装nginx就可以了。 来测试一下看看。

[root@host ~]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: hart-edu/0.0.1
Date: Sun, 30 Sep 2018 05:44:00 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 30 Sep 2018 03:44:42 GMT
Connection: keep-alive
ETag: "5bb046aa-264"
Accept-Ranges: bytes

看已经将nginx信息隐藏了。

CentOS7下配置 iptables

iptables也叫netfilter,是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,他的功能十分强大,使用也非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。但是iptables在CentOS7的版本上已经被阉割掉了,我们需要自行安装,以下是在CentOS7下安装iptables和使用方式。

一、安装iptables

命令

systemctl status iptables

返回

-bash: systemctl: command not found

输出结果表示没有iptables的相关服务,我们需要安装

停止firewal

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service

关闭SELINUX

vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加

保存退出

:wq!

使配置立即生效

setenforce 0

安装

yum install iptables-services

编辑防火墙配置文件

vi /etc/sysconfig/iptables
配置文件添加常用端口以后状态
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

保存退出

:wq!

二、命令

系统命令
systemctl start iptables #启动
systemctl status iptables #查看运行状态
systemctl restart iptables.service #重启
systemctl stop iptables.service #停止
systemctl enable iptables.service #设置开机启动
systemctl disable iptables.service #禁止开机启动

常用命令
iptables -h #查询帮助
iptables -L -n #列出(filter表)所有规则
iptables -L -n –line-number #列出(filter表)所有规则,带编号
iptables -L -n -t nat #列出(nat表)所有规则
iptables -F #清除(filter表)中所有规则
iptables -F -t nat #清除(nat表)中所有规则
service iptables save #保存配置(保存配置后必须重启iptables)
systemctl restart iptables.service #重启

三、语法

filter表解析
filter表是iptables默认使用的表,负责对流入、流出本机的数据包进行过滤,该表中定义了3个链,分别是:INPUT、OUTPUT、FORWARD
INPUT:过滤进入主机的数据包
OUTPUT:处理从本机出去的数据包
FORWARD:负责转发流经本机但不进入本机的数据包,起到转发作用
3.2、iptables常用语法
-A:追加到规则的最后一条
-D:删除记录
-I:添加到规则的第一条
-p:(proto)规定通信协议,常见的协议有:tcp、udp、icmp、all
-j:(jump)指定要跳转的目标,常见的目标有:ACCEPT(接收数据包)、DROP(丢弃数据包)、REJECT(重定向)三种,但是一般不适用重定向,会带来安全隐患

常见案例

4.1、IP过滤
4.1.1、禁止192.168.1.3 IP地址的所有类型数据接入
iptables -A INPUT ! -s 192.168.1.3 -j DROP
4.2、开放端口
4.2.1、开放端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT #开放80端口
4.2.2、开放端口范围
iptables -I INPUT -p tcp –dport 22:80 -j ACCEPT #开发22-80范围的端口
4.2.3、不允许80端口流出
iptables -I OUTPUT -p tcp –dport 80 -j DROP

centos7 安装bbr教程

Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。

建议使用BBR透明并且使用方便,BBR作为现在TCP比较好的拥塞控制协议,通过对于带宽和网络延迟的交替估计更加准确控制发送窗口的大小。Centos7开启方法:

1. yum系统更新

yum update -y

​2.查看系统版本

cat /etc/redhat-release

输出如下,则表示已升级到7.5(当前最新)

CentOS Linux release 7.5.1804 (Core)

3.安装elrepo并升级内核

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum --enablerepo=elrepo-kernel install kernel-ml -y

正常情况下将输出如下,

Transaction Summary
================================================================================
Install  1 Package

Total download size: 39 M
Installed size: 169 M
Downloading packages:
kernel-ml-4.9.0-1.el7.elrepo.x86_64.rpm                    |  39 MB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : kernel-ml-4.9.0-1.el7.elrepo.x86_64                          1/1
  Verifying  : kernel-ml-4.9.0-1.el7.elrepo.x86_64                          1/1
  
Installed:
  kernel-ml.x86_64 0:4.9.0-1.el7.elrepo
  
Complete!

3.更新grub文件并重启(reboot后,ssh会断开,稍等一会儿重新连接)

egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0
reboot

4.开机后查看内核是否已更换为4.9

uname -r

输出如下内容则表示内核4.9已经启动了

4.18.9-1.el7.elrepo.x86_64

5.开启bbr

vi /etc/sysctl.conf

添加如下内容

net.core.default_qdisc = fq 
net.ipv4.tcp_congestion_control = bbr

加载系统参数(正常情况下会输出我们之前加入的内容)

sysctl -p

4.确定bbr已经开启

输入

sysctl net.ipv4.tcp_available_congestion_control

返回

net.ipv4.tcp_available_congestion_control = reno cubic bbr

则安装成功

输入

lsmod | grep bbr

返回

tcp_bbr                20480  16

启动成功