«

Vultr VPS —— SS+流量查看

时间:2017-8-3     作者:SES雪蓝     分类: VPS


在网上看到的,做个记录。

【本文包含:购买服务器、配置SS、配置锐速、配置网页端的流量查看】


首先是选择服务器。这里推荐的是电信选择vultr洛杉矶服务器,联通选择vultr东京服务器。
一 注册Vultr然后点击Vultr链接 https://www.vultr.com/?ref=8465354-6G   或者点击下面的图片输入邮箱及密码点击 Sign UP,完成注册,系统会发一个邮件到你邮箱,注意查收。首次进入后台,需要我们为账户充值,Billing(充值)选择支付方式充值,推荐支付宝,方便快捷【通过上面的链接注册成功,并充值25美元可以在一个月后获得50美元】。

二 服务器选择
充值完毕,点击 右侧+号,即Deploy New Server 。

Server Location 服务器选择Tokyo(东京) 或者 NJ(新泽西) 速度比较快
Server Type操作系统选择 Ubuntu 18.04 x64(系统选择会影响下面的设置)
Server Size 选择月付$5/mo(也可以选$3.5。注意,需要不要选择ipv6 only的,否则你只能用ipv6来访问了)
其他信息默认即可。点击 Deploy Now ,生成一个新VPS。服务器信息我们到service中点击Cloud Instance 进入控制面板



三 SS安装

================= 一键安装版本 ==================
经过前面的前奏,我们终于来到了正题。这里推荐的是新手一键安装命令。只要输入一个密码即可完成SS安装。系统选择的是debian
wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian.sh && chmod +x shadowsocks-libev-debian.sh && ./shadowsocks-libev-debian.sh 2>&1 | tee shadowsocks-libev-debian.log

=================手动安装版本【可以方便的多用户】==================

按顺序执行:

#地址: https://github.com/hellofwy/ss-bash
apt-get update
apt-get install python-pip -y
pip install shadowsocks
如果报错`Cannot fetch index base URL http://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement shadowsocks
No ributions at all found for shadowsocks`
就执行这句:pip install shadowsocks --extra-index-url=https://pypi.python.org/simple/
apt-get install unzip
apt-get install bc
mkdir /work/
cd /work/
wget https://github.com/hellofwy/ss-bash/archive/master.zip
unzip master.zip
#已经安装好了,接下来是使用
cd ss-bash-master/
#查看帮助
./ssadmin.sh h
#添加用户,例如新增用户端口为8388,密码是123456,流量限制100G
./ssadmin.sh add 8388 123456 100G
#启动
./ssadmin.sh start
#添加开机启动 编辑 /etc/rc.local
nano /etc/rc.local
#在 exit 0 前面加入下面这句(路径请自行替换)
/work/ss-bash-master/ssadmin.sh start
Ubuntu 18.04的OpenSSL有问题,在openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup函数。
解决办法:
用nano打开文件:nano /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py (该路径请根据自己的系统情况自行修改,如果不知道该文件在哪里的话,可以使用find命令查找文件位置)
跳转到52行(shadowsocks2.8.2版本,其他版本搜索一下cleanup)
将第52行`libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,) `
 改为`libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)`【cleanup=>reset】
再次搜索cleanup(全文件共2处,此处位于111行),将`libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx)`
  改为`libcrypto.EVP_CIPHER_CTX_reset(self._ctx)`【cleanup=>reset】
保存并退出
work/ss-bash/ssadmin restart

========================================
四 锐速优化SS速度
因为vultr 是KVM系统的VPS,所以我们可以使用锐速来优化SS连接速度。这里也是推荐新手使用一键命令
安装锐速(如果选择Debian 8x64需要降内核版本才可安装)
wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh && bash serverspeeder-all.sh 
卸载锐速
chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f 
锐速加入自启动
登录上去找到etc目录下的文件rc.local 打开文档并插入 service serverSpeeder start 选择保存即可。
-------------------------------------------------------------------------------------------------------

配置SSH登录:

将本地的id_rsa.pub复制到远程

用scp命令,将母机产生的key拷一份到远程服务器上,并命名成authorized_keys;

scp ~/.ssh/id_rsa.pub  root@your ip:~/.ssh/authorized_keys。这一步的操作需要手动输入密码【authorized_keys是一个文件】。

设置权限600:

chmod 600 ~/.ssh/authorized_keys

然后就可以ssh root@yourIP登录啦~
-------------------------------------------------------------------------------------------------------

添加中文支持:

dpkg-reconfigure locales

选择

zh_CN GB2312

zh_CN.UTF-8 UTF-8

(空格选择,回车确定)
默认语言选择en_US UTF-8就可以了

设置完成后,需要重启:

reboot

-------------------------------------------------------------------------------------------------------


每月定时执行任务&网页端查看流量:

crontab -e 编辑文件

0 0 1 * * /work/run_everymonth.sh #每月1号00:00执行

*/5 * * * * /work/run_every5minute.sh #每5分钟执行


#run_everymonth.sh 文件内容

#!/bin/bash

source /etc/profile

/work/ss-bash-master/ssadmin.sh reset_all_used


#run_every5minute.sh 文件内容

#!/bin/bash

source /etc/profile

cp /work/ss-bash-master/sstraffic /var/www/traffic.txt


apt-get update

apt-get install apache2


#/var/www目录下的内容


index.html 查看流量的网页页面

<!DOCTYPE html>
<html>
<head>
  <title>Traffic Control</title>
  <script src=http://cdn.bootcss.com/jquery/3.2.0/jquery.min.js></script>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="stylesheet">
  <script src="http://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script src="test.js"></script>
</head>
<body>
<script type="text/javascript">
var defaultShow=GetQueryString("name");
if(window.location.host=="ss.lizhuo.name"){
    defaultShow="lizhuo";
}else {
    if(window.location.host.split(".")[0]!="ss")
        defaultShow=window.location.host.split(".")[0];
}

var text="";
$.ajax({
  url: "traffic.txt",
  method: "GET",
  success: function(data){
    text = data.replace(' ', '').replace(/\t| /g, ',').replace(new RegExp(',+',"gm"),',');
    text = text.replace("#port","姓名");
    text = text.replace("limit","可用流量");
    text = text.replace(/in_TB/g,"TB");
    text = text.replace("used","已用");
    text = text.replace("remaining","剩余流量");
    text = text.replace("2147","SueSun");
    text = text.replace("5531","LiZhuo");
    text = text.replace("4341","Albert");
    text = text.replace("8899","Company");
    text = text.replace("1909","HC");
    text = text.replace("7192","LiYan");
    text = text.replace("Total","总计");

    successFunction(text,defaultShow);
  }
})
</script>
</body>
</html>




test.js    网页需要的js

function successFunction(data,name) {
var allRows = data.split(/\r?\n|\r/);
 var table = '<table class="table table-hover" style="width: 50%; margin: auto;">';
 for (var singleRow = 0; singleRow < allRows.length; singleRow++) {
  var rowCells = allRows[singleRow].split(',');
  var curr=rowCells[0];
  if(singleRow===0 || name==curr.toLowerCase() || name=="total")
  {
    if (singleRow === 0) {
     table += '<thead>';
     table += '<tr>';
    } else {
     table += '<tr>';
    }
    for (var rowCell = 0; rowCell < rowCells.length; rowCell++) {
     if (singleRow === 0) {
      table += '<th class="text-right">';
      table += rowCells[rowCell];
      table += '</th>';
     } else {
      table += '<td class="text-right">';
      table += rowCells[rowCell];
      table += '</td>';
     }
   }
  }
  if (singleRow === 0) {
   table += '</tr>';
   table += '</thead>';
   table += '<tbody>';
  } else {
   table += '</tr>';
  }
 } 
 table += '</tbody>';
 table += '</table>';
 $('body').append(table);
}

function GetQueryString(name)
{
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)
         return unescape(r[2]); 
     return "";
}