亲测,在安装锐速后,再进行一次 tcp 优化,还能增加下载效果。

增加 tcp 连接数量

编辑 limits.conf

1
vi /etc/security/limits.conf

增加以下两行

1
2
* soft nofile 51200
* hard nofile 51200

开启酸酸乳 服务之前,先设置一下 ulimit

1
ulimit -n 51200

调整内核参数

首先科普下 TCP 拥塞控制算法: 中美之间的线路质量不是很好, rtt 较长且时常丢包。 TCP 的设计目的是解决不可靠线路上可靠传输的问题,即为了解决丢包,但丢包却使 TCP 传输速度大幅下降。 HTTP 协议在传输层使用的是 TCP 协议,所以网页下载的速度就取决于 TCP 单线程下载的速度(因为网页就是单线程下载的)。丢包使得 TCP 传输速度大幅下降的主要原因是丢包重传机制,控制这一机制的就是 TCP 拥塞控制算法。 Linux 内核中提供了若干套 TCP 拥塞控制算法,这些算法各自适用于不同的环境。 1 ) reno 是最基本的拥塞控制算法,也是 TCP 协议的实验原型。 2 ) bic 适用于 rtt 较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是 2.6.8 到 2.6.18 之间的 Linux 内核的默认算法。 3 ) cubic 是修改版的 bic ,适用环境比 bic 广泛一点,它是 2.6.19 之后的 linux 内核的默认算法。 4 ) hybla 适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。 我们需要做的工作就是将 TCP 拥塞控制算法改为 hybla 算法,并且优化 TCP 参数。 1 、查看可用的算法。 主要看内核是否支持 hybla ,如果没有,只能用 cubic 了。

1
sysctl net.ipv4.tcp_available_congestion_control

2 、如果没有该算法,则加载 hybla 算法(不支持 OpenVZ )

1
/sbin/modprobe tcp_hybla

3 、首先做好备份工作,把 sysctl.conf 备份到 root 目录

1
cp /etc/sysctl.conf /root/

4 、修改 sysctl.conf 配置文件,优化 TCP 参数

1
vi /etc/sysctl.conf

添加以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fs.file-max = 51200
#提高整个系统的文件限制
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 3240000

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#如果linux内核没到3.10,这个fastopen请注释掉
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla

5 、保存生效

1
sysctl -p

小结

经测试, digitalocean,ramnode 的 KVM 等内核支持 hybla 算法。但是 linode 的内核目前不支持 需要注意的是每次重启需要重新加载 hybla 算法模块,可以写入 rc.local 自动启动。

来自Hostloc的一位坛友做的一个脚本,方便测试回程Ping值。目前支持众多区域和各大运营商。

脚本

1
2
wget https://raw.githubusercontent.com/helloxz/mping/master/mping.sh
bash mping.sh

截图

如果希望增加更多测试节点,直接编辑源码,修改修改即可。(节点来自各地运营商DNS)

Speedometer

这是我首推的一个工具,原因是有彩色的图表,简单直观。

安装使用

1
2
3
4
5
6
# Debian / Ubuntu
apt-get update
apt-get install speedometer -y

# 使用方法 (其中 eth0 是你要监听的网卡名称)
speedometer -r eth0 -t eth0

Bmon

如果说上面的那款工具过于花哨,功能性不强的话,可以试试看这款 Bmon,感觉就是增强版的 nload。

安装使用

1
2
3
4
5
6
7
8
9
10
# Debian / Ubuntu
apt-get update
apt-get install bmon -y

# CentOS / RHEL
yum install epel-release -y
yum install bmon -y

# 使用方法
bmon

本文以Ubuntu 12.04 LTS Desktop (x64)默认配置为例(机器的内存为4GB),推荐先阅读**《TCP连接的状态与关闭方式,及其对Server与Client的影响》《Windows系统下的TCP参数优化》**,以了解TCP优化的相关知识。


/proc/sys/net目录

所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数:

参数(路径**+**文件)

描述

默认值

优化值

/proc/sys/net/core/rmem_default

默认的TCP数据接收窗口大小(字节)。

229376

256960

/proc/sys/net/core/rmem_max

最大的TCP数据接收窗口(字节)。

131071

513920

/proc/sys/net/core/wmem_default

默认的TCP数据发送窗口大小(字节)。

229376

256960

/proc/sys/net/core/wmem_max

最大的TCP数据发送窗口(字节)。

131071

513920

/proc/sys/net/core/netdev_max_backlog

在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

1000

2000

/proc/sys/net/core/somaxconn

定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。

128

2048

/proc/sys/net/core/optmem_max

表示每个套接字所允许的最大缓冲区的大小。

20480

81920

/proc/sys/net/ipv4/tcp_mem

确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(注意,其单位是内存页而不是字节)。

94011  125351  188022

131072  262144  524288

/proc/sys/net/ipv4/tcp_rmem

为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)。

4096  87380  4011232

8760  256960  4088000

/proc/sys/net/ipv4/tcp_wmem

为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。

4096  16384  4011232

8760  256960  4088000

/proc/sys/net/ipv4/tcp_keepalive_time

TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。

7200

1800

/proc/sys/net/ipv4/tcp_keepalive_intvl

探测消息未获得响应时,重发该消息的间隔时间(秒)。

75

30

/proc/sys/net/ipv4/tcp_keepalive_probes

在认定TCP连接失效之前,最多发送多少个keepalive探测消息。

9

3

/proc/sys/net/ipv4/tcp_sack

启用有选择的应答(1表示启用),通过有选择地应答乱序接收到的报文来提高性能,让发送者只发送丢失的报文段,(对于广域网通信来说)这个选项应该启用,但是会增加对CPU的占用。

1

1

/proc/sys/net/ipv4/tcp_fack

启用转发应答,可以进行有选择应答(SACK)从而减少拥塞情况的发生,这个选项也应该启用。

1

1

/proc/sys/net/ipv4/tcp_timestamps

TCP时间戳(会在TCP包头增加12个字节),以一种比重发超时更精确的方法(参考RFC 1323)来启用对RTT 的计算,为实现更好的性能应该启用这个选项。

1

1

/proc/sys/net/ipv4/tcp_window_scaling

启用RFC 1323定义的window scaling,要支持超过64KB的TCP窗口,必须启用该值(1表示启用),TCP窗口最大至1GB,TCP连接双方都启用时才生效。

1

1

/proc/sys/net/ipv4/tcp_syncookies

表示是否打开TCP同步标签(syncookie),内核必须打开了CONFIG_SYN_COOKIES项进行编译,同步标签可以防止一个套接字在有过多试图连接到达时引起过载。

1

1

/proc/sys/net/ipv4/tcp_tw_reuse

表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接 。

0

1

/proc/sys/net/ipv4/tcp_tw_recycle

能够更快地回收TIME-WAIT套接字。

0

1

/proc/sys/net/ipv4/tcp_fin_timeout

对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。

60

30

/proc/sys/net/ipv4/ip_local_port_range

表示TCP/UDP协议允许使用的本地端口号

32768  61000

1024  65000

/proc/sys/net/ipv4/tcp_max_syn_backlog

对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字。

2048

2048

/proc/sys/net/ipv4/tcp_low_latency

允许TCP/IP栈适应在高吞吐量情况下低延时的情况,这个选项应该禁用。

0

/proc/sys/net/ipv4/tcp_westwood

启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化,对于WAN 通信来说应该启用这个选项。

0

/proc/sys/net/ipv4/tcp_bic

为快速长距离网络启用Binary Increase Congestion,这样可以更好地利用以GB速度进行操作的链接,对于WAN通信应该启用这个选项。

1

 


/etc/sysctl.conf文件 /etc/sysctl.conf是一个允许你改变正在运行中的Linux系统的接口。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,可用来控制Linux网络配置,由于/proc/sys/net目录内容的临时性,建议把TCPIP参数的修改添加到/etc/sysctl.conf文件, 然后保存文件,使用命令“/sbin/sysctl –p”使之立即生效。具体修改方案参照上文:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
net.core.rmem_default = 256960

net.core.rmem_max = 513920

net.core.wmem_default = 256960

net.core.wmem_max = 513920

net.core.netdev_max_backlog = 2000

net.core.somaxconn = 2048

net.core.optmem_max = 81920

net.ipv4.tcp_mem = 131072  262144  524288

net.ipv4.tcp_rmem = 8760  256960  4088000

net.ipv4.tcp_wmem = 8760  256960  4088000

net.ipv4.tcp_keepalive_time = 1800

net.ipv4.tcp_keepalive_intvl = 30

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_sack = 1

net.ipv4.tcp_fack = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

net.ipv4.ip_local_port_range = 1024  65000

net.ipv4.tcp_max_syn_backlog = 2048

   

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
这儿所列参数是老男孩老师生产中常用的参数:
net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_wmem = 8192 131072 16777216

net.ipv4.tcp_rmem = 32768 131072 16777216

net.ipv4.tcp_mem = 786432 1048576 1572864

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.ip_conntrack_max = 65536

net.ipv4.netfilter.ip_conntrack_max=65536

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

对比网上其他人的生产环境优化参数,需要优化的参数基本差不多,只是值有相应的变化。具体优化值要参考应用场景,这儿所列只是常用优化参数,是否适合,可在上面查看该参数描述,理解后,再根据自己生产环境而设。其它相关linux内核参数调整文章:Linux内核参数优化flandycheng.blog.51cto.com/855176/4767…优化linux的内核参数来提高服务器并发处理能力 www.ha97.com/4396.htmlnginx做web服务器linux内核参数优化

有的时候 , 你需要临时下载个文件 , 但安装 nginx 又显得过于劳师动众 , 那么用 python 架设个简易的 http 服务器就很方便啦 .

1
python -m SimpleHTTPServer 80

这个命令会把你运行命令的 当前目录 作为 http 服务的根目录 . 所以选好目录再运行哦 . 运行后 , 你就可以在浏览器通过服务器 ip 进行访问了 如果你不想用 80 端口 , 可以把这个 80 改成其他端口 . 如果你想在后台长时间运行这个程序那么可以使用 nohup 命令

1
nohup python -m SimpleHTTPServer 80 &

是不是很方便呢 .

之前我们介绍过一行代码架设个 HTTP 服务器 < 教程 : 一行代码架设个简易 http 服务 > 相比与 http,ftp 对于大文件的传输更加保险 , 而且还能使用各种软件进行挂载 . 今天介绍的 FTP 命令也是用 python 来实现 .

安装环境

因为这个组件 python 默认没有 , 所以要先安装下

1
pip install pyftpdlib

使用

最简单的

. 请放到你要 ftp 的目录 , 它会把该目录变成根目录 . 并且匿名访问 : 默认端口是 2121

1
python -m pyftpdlib

你就可以在浏览器里面通过 : ftp:// 服务器 ip:2121 来访问你的 ftp 服务器了

如果需要使用用户名和密码

1
python -m pyftpdlib -u jarods -P www.jarods.org

-u 是指定用户名  -P 是指定密码 ( 这个 P 是大写 ). 这个语句的含义就是 : 用户名是 jarods, 密码是 www.jarods.org

后台运行

1
nohup python -m pyftpdlib -u jarods -P www.jarods.org &

后台运行后 , 如果要删除进程关闭 ftp 的话可以执行命令 :

1
ps auxgrep pyftpdlibawk '{print $2}'xargs kill -9

开机启动

把后台运行的那个代码写入 /etc/rc.local

1
echo "nohup python -m pyftpdlib -u jarods-p www.jarods.org &" >> /etc/rc.local

 

其他一些参数

除上之外,还有一些可选参数:

  • p 指定端口(默认为 2121 )
  • w 写权限(默认为只读)
  • d 指定目录 (默认为当前目录)

最近这段时间我朝的墙是越来越猛,有点赶尽杀绝的意思,也不知道是有什么重要日子? 对于搭自用梯子的话,目前有一个比较好的方案可以非常有效的“防封”,就是今天要给大家介绍的Ocserv(OpenConnect)以下简称Ocserv。 因为Anyconnect是思科开发出来的,众所周知思科的网络设备天下第一,很多大型的企业都是用思科的设备,包括Anyconnect这种VPN解决方案,所以墙不敢随便封这种协议的梯子。 但是由于思科只允许Anyconnect运行在思科的设备上,所以就有了今天的Ocserv服务端。Ocserv诞生的主要目的就是可以让任何设备都能安装上Anyconnect而不在局限于思科。 因为最近墙实在是太鸡儿猛了,所以没办法才用Anyconnect的,一般情况下这玩意我都不想碰,毕竟搭建和配置都比较麻烦,而且也不是很好配合其他的加速软件,所以就一直没想写这方面的文章,今天就详细写一下吧。 为了教程更简便,这里我直接用EPEL源安装Ocserv,可以省去麻烦的编译过程。首先安装EPEL源:

yum -y install epel-release

然后就可以直接YUM安装Ocserv了:

yum -y install ocserv

新建一个目录,用来存放SSL证书相关文件,然后进入到这个目录内:

mkdir ssl
cd ssl

新建一个证书模板:

vi ca.tmpl

写入:

cn = “LALA” organization = “LALA.IM” serial = 1 expiration_days = 9999 ca
signing_key
cert_signing_key
crl_signing_key

注:LALA和LALA.IM可以根据自己的需要更改,反正都是自签证书,随便瞎鸡儿写也没关系。。。 然后生成私钥和CA证书:

certtool --generate-privkey --outfile ca-key.pem
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

接着来生成服务器证书,还是老样子新建一个证书模板:

vi server.tmpl

写入:

cn = “你的服务器IP” organization = “LALA.IM” expiration_days = 9999 signing_key
encryption_key
tls_www_server

注:cn后面的值改成你的服务器公网IP。 然后生成私钥和证书:

certtool --generate-privkey --outfile server-key.pem
certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem

然后我们把证书文件用移动到Ocserv默认的目录下:

cp server-cert.pem /etc/pki/ocserv/public/ cp server-key.pem /etc/pki/ocserv/private/ cp ca-cert.pem /etc/pki/ocserv/cacerts/

现在编辑ocserv的配置文件(需要改动的地方很多,如果vi不好用就自己用SFTP把这个文件下载到本地用专业的编辑器编辑):

vi /etc/ocserv/ocserv.conf

让我们一起来看看需要改哪些地方: 1、auth也就是验证方式要改为:

auth = “plain[passwd=/etc/ocserv/ocpasswd]“

如图所示: 2、默认的监听端口为443,如果你的服务器上跑着HTTPS的WEB站点,那么443端口肯定是被占用了的,所以如果有需求的话,可以更改下面的值:

# TCP and UDP port number tcp-port = 443 udp-port = 443

如图所示: 3、Anyconnect有一个设置连接欢迎信息的功能,也就是你在连接的时候会弹出一个提示框,提示框的内容就可以自行设置,如有需要可以更改下面的值:

# A banner to be displayed on clients banner = “Welcome LALA.IM”

如图所示: 4、Anyconnect可以限制最大允许连接的设备数量,如有需要可以更改下面这两个值:

max-clients = 16 max-same-clients = 2

如图所示: 5、更改服务器证书以及私钥的路径为我们刚才移动的路径:

server-cert = /etc/pki/ocserv/public/server-cert.pem
server-key = /etc/pki/ocserv/private/server-key.pem

如图所示: 6、更改CA证书的路径为我们刚才移动的路径:

ca-cert = /etc/pki/ocserv/cacerts/ca-cert.pem

如图所示: 7、取消如下几个参数的注释(去掉#号就是去掉注释):

ipv4-network
ipv4-netmask

如图所示: 8、去掉如下参数的注释以及设置DNS服务器地址:

tunnel-all-dns = true dns = 8.8.8.8 dns = 8.8.4.4

如图所示: 确定你已经修改好上面的内容,然后保存即可。 现在来创建一个VPN用户:

ocpasswd -c /etc/ocserv/ocpasswd lala

盲输两遍密码即可。如果不想让这个用户继续使用了,可以执行下面的命令删除指定的用户:

ocpasswd -c /etc/ocserv/ocpasswd -d lala

现在我们开启机器的IPV4转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

然后启动CentOS7的Firewalld防火墙:

systemctl start firewalld.service

放行Anyconnect的端口(我这里之前设置的是默认的443端口,如果你修改了端口,那么这里也要对应):

firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=443/udp

设置转发:

firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -o eth0 -j MASQUERADE

注:eth0是你的公网网卡名字,每个机器的名字可能都不一样,自己用ifconfig命令查一下就行了。 重加载,让新的配置生效:

firewall-cmd --reload

现在就可以尝试运行一下Ocserv了:

ocserv -f -d 1

如果一切正常,回显的内容大致如下图所示: 确定正常后按键盘组合键Ctrl+C退出运行,现在我们就可以直接用systemctl来管理Ocserv的进程。 设置Ocserv开机启动:

systemctl enable ocserv

启动Ocserv:

systemctl start ocserv

Anyconnect支持多平台客户端,Win/iOS/Android都是支持的,软件下载地址: https://software.cisco.com/download/home/286281283/type/282364313/release/4.6.01103 iOS的话直接在商店里面搜索Anyconnect安装就行了。下面我拿iOS设备示范一下。 首先打开APP点击“设置”,把“阻止不信任的服务器”这个选项关闭,如图所示: 接着点击“连接”-“添加VPN连接”,按如下图配置: 现在就可以连接了,会提示你不信任的服务器,点“继续”: 然后就是输入用户名密码了,这里就不多说了,用户名和密码就是之前你自己在终端内创建的那个,如果用户名和密码验证正确的话,那么最后就会弹出你设置的欢迎信息: 现在就开始爱国吧。。。 写在最后: 其他客户端的配置都大同小异。因为我们是自签的证书,所以不管在哪个客户端上只要把“阻止不信任的服务器”这种类似的功能关闭就行了。

讲道理,CentOS7想开个BBR如果不用一键脚本的话,还真有点麻烦。。。如果是Debian/Ubuntu的话基本就是几条命令就能解决的事,但是由于CentOS的内核一向过于古老,所以你们懂的= = BBR这项新功能是在kernel4.9中加入的,而CentOS都还停留在2.x的内核,所以要给CentOS装BBR第一件事就是想办法装上高版本的内核。 那么我们首先安装elrepo源:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

安装yum-utils:

yum -y install yum-utils

启用elrepo-kernel:

yum-config-manager --enable elrepo-kernel

安装elrepo内的最新内核:

yum -y install kernel-ml kernel-ml-devel

完成之后,一般情况下,新安装的内核就应该已经在grub2的0号启动位了,不过为了以防万一,还是自己执行下面的命令手动查看一番:

awk -F\‘ ‘$1==”menuentry “ {print i++ “ : “ $2}’ /etc/grub2.cfg

如图所示的回显,4.x的内核就是我们刚新安装上的内核了,确实是在0号: 接下来设置grub2默认的启动项为0,如果你的4.x内核启动编号不是0就把下面命令的0改成对应你自己的:

grub2-set-default 0

然后直接重启机器:

reboot

如果内核更换成功并且grub2启动没问题的话,稍等片刻机器就能重新开机,但如果哪个地方出了问题可能就挂掉了,此时你只能通过VNC或者IPMI检查。也有可能会出现重启之后内核没有更换成功的问题,这就要自己检查了。 这里我是用的GoogleCloud,在系统重启之后先看下内核是否更换成功:

uname -a

返回4.x的内核信息就说明更换成功: 所以接下来就是开启BBR了,直接依次执行下面的三条命令即可完成开启BBR的操作:

echo “net.core.default_qdisc=fq” >> /etc/sysctl.conf
echo “net.ipv4.tcp_congestion_control=bbr” >> /etc/sysctl.conf
sysctl -p

最后验证BBR是否启用成功:

sysctl net.ipv4.tcp_congestion_control
lsmod grep bbr

返回如下图信息就说明大功告成了:

SolusVM相信经常买OneManIDC小鸡的人来说,都不会很陌生吧,市面上很多小学生IDC都是用的这套系统,我们在开始之前,先简要介绍一下SolusVM。 SolusVM是一套国外的服务器虚拟化管理软件,主要分为主控(Master)、被控(Slaves)两个部分。主控提供图形化的WEBUI用来控制被控,主控一般情况下,我们可以随便找一台VPS安装,但被控则必须安装在独立服务器内。另外主控可以控制多个被控,实现虚拟化集群管理等一系列功能。 SolusVM不是一款免费的软件,它的授权价格是主控10刀一月,被控2.5刀一月。请注意被控数量可以无限制的购买,2.5刀一月是单价。也就是说,如果你打算在一台独立服务器上开小鸡,那么你一个月最少就要用12.5刀。如果你有多台独立服务器则需要再另外买被控授权。另外,SolusVM官方提供30天的免费试用授权,试用授权提供一个主控+5个被控,如果你是新手,可以先申请一个免费的授权使用。 如果你能把这篇文章接下来所写的内容全部都学会,那么你已经具备做一个OneManIDC的能力了,如果你真的打算做IDC了,千万别给OneMan这个词丢脸哦,要知道OneManIDC也有做的很不错的,但如果你做不好,难免就要被人称呼为“小学生IDC”了,这取决于你对这个行业的热情和诚信。 本文所使用的环境: Hetzner独立服务器X1 LinodeVPSX1 CentOS7X64 首先我们来安装被控,我们登录到Hetzner后台,激活救援模式: 然后还是和往常一样,执行硬重启: 重启完成后,使用Xshell,登录到救援系统内,执行命令:

installimage

如图所示: 选择CentOS: 选择7.4版本: 做RAID0: 接下来到了一个非常关键的地方了,就是使用LVM进行硬盘分区,我们需要注意的是SolusVM只需要我们创建卷组(VG)即可,剩下的硬盘空间SolusVM会根据虚拟机所需的硬盘大小来自动划分。所以我们分区的时候,只把CentOS必要的文件系统分出来,其他的空间全部不划分,如图所示: 确认你的分区配置没问题后,按键盘F10,保存然后就是按几个回车,程序就会自动帮你装系统了。安装完成后,执行命令重启:

reboot

如图所示: 重启完成后,就可以登录到刚新装的CentOS7内了,可以看到硬盘只划分了100G,我这台独立服务器是6T的硬盘,剩下的容量这里都没有显示挂载,那么就是正常的: 现在我们就可以在这台独立服务器内安装SolusVM被控了,执行如下两条命令即可开始安装:

wget https://files.soluslabs.com/install.sh sh install.sh

看到如下界面后,因为我们是要开KVM的机器,然后我们要装的是被控,所以这里我们键入2回车: 接下来就是等了,大概5分钟左右,安装就可以完成,成功后会回显给你这台被控的KEY和密码信息,这两个信息务必要妥善保管: 如果你是开OpenVZ的小鸡,那么可以说SolusVM是开箱即用的,但我们要开的是全虚拟化的KVM,这里我们就还需要手动配置网卡的桥接。在Hetzner的独立服务器上,我这里给出一个可行的桥接方案。(不保证在别的独立服务器上也可用,因为每个服务器的网络环境都不同) 安装桥接依赖,这个其实SolusVM自动安装的时候应该是已经装好了的:

yum -y install bridge-utils

开ipv4转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

新建一个桥接网卡命名为br0

vi /etc/sysconfig/network-scripts/ifcfg-br0

写入:

DEVICE=br0
TYPE=Bridge BOOTPROTO=none
IPADDR=你的服务器公网IP
NETMASK=子网掩码 SCOPE=“peer 你的服务器网关地址” ONBOOT=yes
DELAY=0 IPV6INIT=yes
IPV6ADDR=你的服务器IPV6地址/64 IPV6_DEFAULTGW=fe80::1 IPV6_DEFAULTDEV=br0

注:上面这些需要修改的信息,可以查看你默认的公网网卡得到,把相应的信息改好就行了。 因为Hetzner用的是路由模式,和很多大众机房联网的方式不一样,所以还要新建一个路由:

vi /etc/sysconfig/network-scripts/route-br0

写入:

ADDRESS0=0.0.0.0 NETMASK0=0.0.0.0 GATEWAY0=你的服务器网关地址

接着重启网络服务,这一步非常关键!一定要先重启一遍,让机器能够识别出我们新加入的网卡信息:

/etc/init.d/network restart

然后查看你现有公网IP的那个网卡名是什么:

ifconfig

可以看到我这台的名字是enp4s0,另外我们之前新配置的br0网卡也能在这里显示出来了: 接着我们修改原来默认的公网网卡配置:

vi /etc/sysconfig/network-scripts/ifcfg-enp4s0

清空这个配置文件,把里面的内容替换成:

DEVICE=enp4s0
HWADDR=你的机器MAC地址 IPV6INIT=yes
ONBOOT=yes
BRIDGE=br0

注:MAC地址就是你主网卡的MAC地址,我这里的就是enp4s0的MAC地址,用ifconfig查看,ether后面的值就是MAC地址。 接着我们再重启一次网络服务:

/etc/init.d/network restart

这样我们就把机器的桥接配置好了,最终的网卡信息现在应该是这样的: 至此,SolusVM的被控端我们就配置完成了,接下来是主控的安装。 首先我们要把主控装到另外一台VPS上,我个人建议主控和被控的网络连通性要比较好才行,以免后期在生产环境的时候出现一些不必要的麻烦。比如我现在的被控是一台德国机器,那么用来搭建主控的VPS最好也是德国的,所以我这里选择把主控装在Linode的德国机房。 安装主控和安装被控需要执行的命令是一模一样的:

wget https://files.soluslabs.com/install.sh sh install.sh

只不过在Linode上,因为系统比较精简,可能连wget都没有,所以先装一个wget:

yum -y install wget

OK,你现在应该可以顺利看到一个熟悉的界面,只不过这次我们要选择1: 稍等片刻,程序安装完成后,会回显给你主控面板的各类信息,如图所示: 默认的管理员账号密码都是vpsadmin, 我们登录进去首先要输入授权码,授权成功后如图所示: 接着更改系统默认的管理员密码: 现在我们就需要把主控和被控进行对接了。首先点击Nodes-Add Node,然后按如下图格式填写: 注: 1、LV Group这个值,一定要填写和我们之前分区指定的名字一样,我最开始配置LVM的时候,用的卷组名就是vg0,所以这里也要填vg0,如果你不是用的这个名字,就要自行更改。 2、IP地址填你的独立服务器IP地址,也就是被控的IP地址。 3、KEY和密码就是之前你装被控完成后回显给你的那些信息。 被控添加完成后,我们现在来加下IP。首先点击IP Blocks-Add IPv4 Block,然后按如图填写: 注: 1、在这个配置里面,只需要注意把Gateway(网关)IP填写正确即可,这个网关IP就是之前被控网卡配置文件route-br0里面的IP地址。 2、Node这里一定要勾选上我们刚才新添加的,这里我是HZE36T。 现在我们就可以在这个IP Blocks里面加IP了: 这里有一个问题,由于Hetzner的IP策略是IP必须绑定一个MAC地址的,所以我们在SolusVM后台配置这里不能用自动生成MAC的模式,一定要把MAC改成Hetzner绑定的那个。 首先我们在Hetzner后台找到你买的IP,后面有一个电脑的小图标,点击它: 这样Hetzner就会给这个IP绑定一个物理的MAC地址,如图所示: 然后我们就可以把这个MAC地址绑定到我们刚添加的IP上了,首先点击如图所示位置: 添加一下即可: 现在我们来准备一些KVM系统模版,SolusVM官方默认是提供一些系统模版的,我们可以到这里查看: https://tdn.solusvm.com/ 假设这里我要配置一个CentOS7的模版,就在主控服务器内执行如下命令:

wget http://templates.repo.onapp.com/solusvm/kvm/linux-centos-7-x86\_64-minimal-latest.gz -O /home/solusvm/kvm/template/linux-centos-7-x86_64-minimal-latest.gz

接着回到SolusVM的后台,点击Media-Add KVM Template,按如图所示填写相应的信息: 注: 1、Generation这个值默认是1,但我们一定要改成2,否则虚拟机无法正常开机。 2、Disk Driver一定要选择virtio。 3、Arch一定要选择x86_64,因为我们的系统模版是基于64位架构制作的。 4、建议开启CPU Model,并把模式改为host-passthrough。我个人是极其讨厌买到手的KVM机器查看CPU信息查不到型号的,所以用这个模式可以直接把母鸡的CPU型号暴露在虚拟机内,虚拟机内可以直接显示母鸡所使用的具体CPU型号。 OK,在添加好了系统模版后,我们还需要把现有的这些系统模版同步到被控中去,因为现在的这些模版文件都还在主控端上。 点击Media-Media Sync,选中我们要同步的模版,然后选中要同步的被控,提交即可: 稍等片刻,一旦这里显示Completed,即代表模版同步完成: 现在我们就可以来添加一个虚拟机套餐了,点击Plans-Add KVM Plan,按你自己的需求设置一个合适的套餐: 注意,下面这个模版一定要选择,否则客户在面板里面找不到可以重装的系统: 现在我们就可以来尝试开通一台KVM架构的VPS了,需要注意的是,在SolusVM的后台中,开设VPS必须要创建一个用户账户,点击左侧的Add Client,填写相应信息即可: 接着点击Virtual ServersAdd-Virtual Server,如图选择KVM架构: 选择我们刚创建的套餐: 设置主机名、操作系统: VPS就创建好了: 稍等片刻儿,用户在前台也能管理VPS了: 最后使用Xshell登录我们创建的小鸡内,跑一个测评脚本: Very nice,一切都是如此的美妙~ 写在最后: 这套开VPS的方案,可以说就是目前最成熟,也最简单方便的了。然后你们可以自己脑补一下,花点钱买套WHMCS主机皮,或是找人定做一套,然后找人买几个便宜的C段,然后找机房托管几台机器,然后把IP路由一下,最后再按照我这篇文章的操作把SolusVM配置好并与WHMCS对接。你也可以做IDC。 本来不想花时间写这些东西的,但是既然IDC的门槛已经这么低了,那就不如让它再低一点,反正做这行,小打小闹谁都可以做,但是真想做规模的话,没几个能做的出来。

KVM即Kernal-based Virtual Machine, 是一种高效且成熟稳定的虚拟化技术, 支持所有的操作系统. 因此, 掌握服务器上搭建KVM平台是很有意义的. 通过虚拟机的建立以及IP分配, 虚拟机可以当做一台完全独立的服务器来使用, 即我们常用的VPS. 搭建虚拟机平台对宿主机系统的要求较高. KVM虚拟化要求宿主机的CPU支持Intel VT或AMD-V技术 (请执行cat /proc/cpuinfo查看), CPUBenchMark至少在1000以上, 建议5000或更多 (ATOM D525这种就不要来装虚拟机了). 系统内存要求至少为4G, 建议8G或更多. 硬盘要求20G以上. 操作系统必须为64位. 服务器至少分配2枚或以上的独立IP地址 (每个VPS一枚, 宿主机一枚). 本次教程, 我们以最新版本的CentOS 7为例, 介绍KVM平台的搭建.  

1, 系统环境准备

(1) 设置服务器名(Hostname) 任何与网络相关的Linux操作都要求设置好服务器名. 请确保您已经正确设置服务器名: 当您在SSH中执行hostname -f命令时, 应看到servername.domainname.com; 当您执行hostname命令时, 应看到servername. 具体设置方法我已强调数十遍, 这里不再赘述. 若未设置好服务器名, 请不要继续.   (2) 软件更新 CentOS系统下执行yum -y update命令更新软件.   (3) 检查网络与IP信息 CentOS 7系统中执行ip addr命令查看网卡及IP地址信息. 查看一下绑定您的宿主机外网主IP地址的网卡名称, 记下它, 我这里是ens9. 查看一下是否有其他的虚拟网卡绑定了额外的外网IP地址, 若有, 请删除对应的虚拟网卡. 本次教程中, 我们假设给宿主机分配的IP地址段为标准网段100.100.100.200/29共8个IP, 则网络地址100.100.100.200, 网关100.100.100.201, 宿主机IP 100.100.100.202, VPS IP段100.100.100.203 ~ 100.100.100.206, 广播地址100.100.100.207, 子网掩码255.255.255.248.  

2, 桌面环境的搭建

如果您仅使用一台服务器搭建KVM, 那我建议搭建桌面环境并搭建VNC服务器, 这样在管理KVM虚拟机和安装操作系统时较为方便. 我们以GNOME桌面环境为例介绍VNC服务器的搭建. GNOME桌面环境安装很简单, 执行下面这行命令即可:

1

yum groupinstall “GNOME Desktop”

然后安装VNC服务器. 执行:

1

yum install tigervnc-server

新建用户, 用来连接VNC, 并配置用户的连接文件. 执行:

1 2

useradd qingsu cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

编辑文件: /etc/systemd/system/vncserver@:1.service 将文件中的替换为我们的用户名qingsu, 并取消行首的注释符. 配置防火墙:

1 2

firewall-cmd –permanent –zone=public –add-service vnc-server firewall-cmd –reload

然后, 切换到用户qingsu, 启动VNC服务器: su qingsu vncserver 此时, 会提示输入VNC密码, 设置好后回车即可. 最后切换回root, 设置随开机启动:

1 2 3

su root systemctl daemon-reload systemctl enable vncserver@:1.service

这样, 我们就配置好VNC服务器了. 在本地电脑上使用VNC客户端连接100.100.100.202:5901即可访问服务器的GNOME桌面环境. 第一次使用VNC连接的时候会提示输入管理员密码, 如下图. 0 此时请输入您的root用户密码. 然后会提示一系列配置信息, 直接NEXT就好.  

3, KVM的安装

KVM安装很简单. 在SSH中执行下面这行命令即可.

1

yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer

 

4, 在宿主机上新建VPS

首先, 使用VNC连接宿主机. 进入桌面后, 找到Virtual Machine Manager, 如下图. 1 打开后, 点击图标Create a new virtual machine. 2 然后按步骤载入系统镜像. 如果没有系统镜像的, 可以去我的下载站http://wget.pro下载. 3 4 5 6 接着分配内存和硬盘. KVM是实虚拟, 因此分配内存后宿主机就不能再使用这部分资源了. 7 8 最后分配网卡. 这里我们要选择桥接模式Bridge, 并选择宿主机的出口网卡. 如下图. 9 这样, 我们就新建完成了VPS, 可以安装操作系统了. 10 是不是很简单呢? 安装系统的时候有一个步骤是配置网络信息, 这里我们的DHCP是不生效的, 需要在VPS上获取IP. 选择Configure Network Manually, 然后按照第一部分第三小节的信息来配置即可. 11 至此, 大功告成. 我们在VPS上安装SSH服务器后, 就可以对它进行完全独立的网络访问了.

0%