我之前写过一个在online上使用pve开ipv6 nat小鸡的教程,但单独使用pve没法实现销售,还是得使用SolusVM来创建销售系统。

开NAT小鸡基本步骤都是设置好硬盘,搭建面板,然后设置hosts进行伪授权,还有最重要的iptables的转发,最后就是node的设置。因为跟普通的多ip母鸡设置不一样,所以得设置内网的转发(有ipv6网段还可以给小鸡分配单独ipv6)。

目标

这个文章是我为了验证online开vps的可行性,后面创建成功VPS后我就没对接销售了。
(单ip服务器限制真大)

online独服作为受控端,使用SolusVM开设Nat+ipv6 KVM虚拟化小鸡并且可以售卖。
virmach黑五的机子作为控制端,控制online。
我之所以选择KVM虚拟化,是因为SolusVM在centos7上没法实现openvz虚拟化,虽然可以在centos6实现openvz虚拟化,但centos6已经停止安全更新,如果非得用centos7,要手动把centos7 转化为 Virtuozzo 7,不稳定,官方不建议使用。
关于超售,即使是kvm也可以超售CPU+硬盘+内存。KVM超售内存的话可以使用Balloon技术。
并且我使用KVM虚拟化后,用户也好在小鸡上安装bbr来加速。

准备

需要的东西

1.最少两台KVM架构的小鸡,最好能是杜甫,一台控制端一台受控端。(你问为什么OpenVZ不能用?你为啥不去问问神奇海螺呢?)
2.刚刚DD完或者刚安装的centos7的系统。虽然SolusVM对centos6支持性最好,但目前centos6已经停止维护了,得不到系统安全补丁,如果母鸡的系统被黑了就操蛋了。
3.最基本的Linux知识(你起码得知道登录,改密码,执行脚本吧。)

查看solusvm文档

前往

https://documentation.solusvm.com/

仔细看完文档。
官方文档比网上其他教程都靠谱。

准备环境

准备全新系统

两台机器使用DD或者重装成干净的centos7的系统。

安装锐速/BBR

控制端与受控端还是安装BBR,尽量加点速度吧。

安装SolusVM

控制端

安装控制端

前往virmach(或者是你作为控制端的机器)
1.使用以下命令安装SolusVM

curl -o install.sh https://files.solusvm.com/install.sh && sh install.sh

出现以下界面呢,就是在安装必须要安装的运行环境了。

SolusVM-Waiting-for-the-installation-environment.png

等过一段时间后,就会出现这个界面了,主要都是啥意思呢,这边给各位解释一下。

SolusVM-installation-options.png

1:管理面板只有 UI。没有虚拟机。(适用于主控和受控分开装的情况)
2:安装 KVM 框架虚拟机。(杜甫才能选)
3:安装 XEN 框架虚拟机。(杜甫才能选)

有些版本的教程是有把面板和虚拟机装在一个 vps 里这个选项,但我这里centos7安装的时候没有。

输入1,回车。。。
当出现:

 Installation Complete. Full install log: /tmp/install.log

 SolusVM UI Login Information:
 =============================
 Admin Area Standard Port (SSL) .... : https://107.75.1.12uid0/admincp
 Admin Area Custom Port (SSL) ...... : https://107.75.1.12uid0:5656/admincp
 Client Area Standard Port (SSL) ... : https://107.75.1.12uid0
 Client Area Custom Port (SSL) ..... : https://107.75.1.12uid0:5656
 Admin Username ...... : vpsadmin
 Admin Password ...... : vpsadmin

 It is advised that you change the default admin password on your first login

 To generate a free signed SSL certificate for your domain using the Lets Encrypt service,
 run the following: /usr/local/svmstack/letsencrypt/letsencrypt -i
 The domain name must already resolve to the servers ip address

 Thankyou for choosing SolusVM

即代表安装完成。

授权控制端

为了让我们正常的可以进行下一步的操作,solusvm默认的话是不授权就没办法进行任何操作。
我这里是备份给我自己看的,我就不共享出来了。

优化

1.关闭selinux
使用

/usr/sbin/sestatus -v

查询自己的系统是否开启了selinux,如果显示

SELinux status:                 enabled

即表示selinux开启了

执行

nano /etc/sysconfig/selinux

改为

SELINUX=disabled

可能你会发现本来就是SELINUX=disabled,那你只需要重启系统即可

2.为自己的域名生成证书
建议使用acme.sh安装https证书

这里的SolusVM master 使用的是nginx

查看自己是否是nginx的可以去/usr/local/svmstack/下看看有没有Nginx目录即可。
1)安装acme.sh
使用普通的方法获取acme.sh

wget -O -  https://get.acme.sh | sh

2)颁发证书
使用普通的方法获取证书。
acme.sh将尝试通过http连接来验证您的域。这意味着根目录是/usr/local/solusvm/www/.verification。请检查是否有此文件夹,否则可以使用/usr/local/solusvm/www作为您的根目录

acme.sh --issue -d solusvm.yourdomain.com \
-w /usr/local/solusvm/www/.verification

如果提示-bash: acme.sh: command not found,那就使用绝对路径

./.acme.sh/acme.sh --issue -d solusvm.yourdomain.com \
-w /usr/local/solusvm/www/.verification

用您的SolusVM主域名替换solusvm.yourdomain.com(这个是你的域名)。请记住,您可以使用-d选项将多个域(SAN)添加到您的证书中。可以查看acme.sh Wiki查看其他的操作方法。

3)将证书安装到SolusVM master

acme.sh --installcert -d solusvm.yourdomain.com \
--keypath /usr/local/svmstack/nginx/ssl/ssl.key \
--fullchainpath /usr/local/svmstack/nginx/ssl/ssl.crt \
--reloadcmd "service svmstack-nginx restart; \
/usr/local/svmstack/sshwebsocket/quit; \
/usr/local/svmstack/sshwebsocket/port_check; \
cd /usr/local/svmstack/nginx/ssl && cat ssl.key ssl.crt > ssl.pem"

此命令会将完整链和私钥安装到/usr/local/svmstack/nginx/ssl/内,它将重新启动Web服务器,重新启动ssh websocket(用于HTML5控制台),然后生成novnc websockify所需的ssl.pem文件。

acme.sh会自动更新证书,不用你管他。

3.修改默认密码
前往以下路径前往修改密码

 Configuration > Administrators > Edit Admin

受控端

我使用online独服作为受控端

安装BBR

正常安装bbr即可

调整硬盘

KVM虚拟化对分区需求

/ 80GB+ (KVM templates & iso's will be stored in /home/solusvm/kvm)
SWAP 4GB+ (Virtual servers may use host swap if there is a real memory shortage)
[8.14.4. Manual Partitioning][4]
Logical Volume Group (LVM) remaining space (Logical Volume Group Only, SolusVM will create the logical volumes for the virtual servers inside this group)

根据需求调整online(独服的硬盘)

为了超售请把swap空间调大些

我的online服务器可以在装系统的时候设置分区,我这里设置了1G的boot,9G的swap,80G的根目录,剩下的空着留给LVM。

online-kvm-server-disk.png

安装系统后,连接服务器,执行

fdisk -l

查看分区情况

[root@FR ~]# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00062154

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   169871359    83886080   83  Linux
/dev/sda3       169871360   188745727     9437184   82  Linux swap / Solaris

可以看到我的服务器硬盘(仅一块)被挂载为“sda”,于是执行指令开始创建LVM

fdisk /dev/sda

具体步骤如下

ommand (m for help): n ## 新建

Command action e extended p primary partition (1-4) p ## 主分区

Partition number (1-4): 4 ## 分区号 (由于我的主分区已经由三个了,系统默认直接创建分区四,这一条将不会显示,这里我手动补全)

First sector (478562304-1953525167, default 478562304):    ##回车默认
Using default value 478562304
Last sector, +sectors or +size{K,M,G} (478562304-1953525167, default 1953525167):
Using default value 1953525167    ##回车默认
Partition 4 of type Linux and of size 703.3 GiB is set

Command (m for help): t ## 改变类型

Selected partition 4 

Hex code (type L to list codes): 8e ## LVM 的分区代码

Changed system type of partition 4 to 8e (Linux LVM)

Command (m for help): w ## 保存并退出

保存退出后重启服务器

重启后再次查看分区情况,发现已经生效。

[root@FR ~]# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00062154

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   169871359    83886080   83  Linux
/dev/sda3       169871360   188745727     9437184   82  Linux swap / Solaris
/dev/sda4       188745728  1953525167   882389720   8e  Linux LVM

参考官方文档的过程:
partkvm.png
创建物理卷、卷组并加入组。

pvcreate /dev/sda4
vgcreate -s 32M solusvm /dev/sda4

执行成功下所示,创建了solusvm卷组。

[root@FR ~]# pvcreate /dev/sda4
  Physical volume "/dev/sda4" successfully created.
[root@FR ~]# vgcreate -s 32M solusvm /dev/sda4
  Volume group "solusvm" successfully created
[root@FR ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0     1G  0 part /boot
├─sda2   8:2    0    80G  0 part /
├─sda3   8:3    0     9G  0 part [SWAP]
└─sda4   8:4    0 841.5G  0 part 
[root@FR ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree  
  solusvm   1   0   0 wz--n- 841.50g 841.50g

如果提示:

  Can't initialize physical volume "/dev/sda4" of volume group "solusvm" without -ff
  /dev/sda4: physical volume not initialized.

可以直接用vgs看看是不是以及创建好solusvm卷组

配置网桥

建议参考官方文档

警告: 以下描述的操作很危险,并且可能导致对服务器的远程访问丢失。建议使用VNC直接访问服务器,以便在紧急情况下恢复更改。

同时配置ipv4与ipv6太复杂了,我先实现ipv4 nat小鸡,再为小鸡配置ipv6吧。

ipv4-only

1.通过SSH连接到从KVM节点

2.禁用网络管理器,因为它可能会干扰网桥。

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
systemctl enable network.service
systemctl start network.service

Centos7中,默认的网络管理是NetworkManager,NetworkManager在桌面系统中比较好用,会让配置实时生效,对于服务器,真的没什么用,双网卡绑定必须停止和禁用NetworkManager服务,还是network比较方便,停用NetworkManage

提示

network.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig network on

不是出错,属于正常情况。

3.检查网络配置文件(例如/etc/sysconfig/network-scripts/ifcfg-eth0)验证是否是真的被禁用了,如果没有这个参数就不用管,别手动添加。

NM_CONTROLLED=no

4.配置网桥前,应该检查/etc/sysconfig/network-scripts/ifcfg-eth0是否类似如下所示。

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
NM_CONTROLLED=no
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="8d6f722c-b945-4083-b50e-9661bf62ae5f"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="203.0.113.2"
GATEWAY="203.0.113.1"
NETMASK="255.255.0.0"
DNS1="8.8.8.8"
IPV6_PRIVACY="no"

5.安装网桥依赖

yum install bridge-utils

6.备份现有的配置文件以供恢复

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/ifcfg-eth0.orig

备份文件请不要放在network-scripts/内,否则可能会被作为配置启用

7.开ipv4转发

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

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

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

执行ip addr,保存显示的东西,下文要用

1)如果你有ipv4段,那就按照官方文档输入

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLLED=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPADDR=203.0.113.2
NETMASK=255.255.0.0
GATEWAY=203.0.113.1

2)如果你是单ipv4,想开nat小鸡,那就输入

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=服务器主IP
NETMASK=255.255.255.248(如果是/29,最后3位是248,根据IP数修改,单ip就填255.255.255.255)
ONBOOT=yes
GATEWAY=网关

9.编辑默认网卡配置

nano /etc/sysconfig/network-scripts/ifcfg-eth0

1).如果你是ip段,输入

NAME=eth0
DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
BRIDGE=br0

2).如果你是单ipv4机
则在末尾添加:

DEVICE=eth0 #设备名称
ONBOOT=yes
BRIDGE=br0

教程都是添加一堆东西,但实际上网卡已经有前面两个东西了,只用添加 BRIDGE=br0 就行了

10.添加其他网卡信息(如果有的话)

vi /etc/sysconfig/network-scripts/ifcfg-br0:0
DEVICE=br0:0
BOOTPROTO=static
IPADDR=服务器IP2
NETMASK=255.255.255.248
IPADDR2=服务器IP3
NETMASK2=255.255.255.248
IPADDR3=服务器IP4
NETMASK3=255.255.255.248
IPADDR4=服务器IP5
NETMASK4=255.255.255.248
ONBOOT=yes

11.重启网络

service network restart

12.检查物理接口eth0是否已链接到桥接接口br0

brctl show

bridge name     bridge id               STP enabled     interfaces
br0             8000.001c42717243       no              eth0
ipv4nat+ipv6

安装受控端

前往独服(或者你其他作为受控端)
1.使用以下命令安装SolusVM

curl -o install.sh https://files.solusvm.com/install.sh && sh install.sh

出现以下界面呢,就是在安装必须要安装的运行环境了。

SolusVM-Waiting-for-the-installation-environment.png

等过一段时间后,就会出现这个界面了,主要都是啥意思呢,这边给各位解释一下。

SolusVM-installation-options.png

1:管理面板只有 UI。没有虚拟机。(适用于主控和受控分开装的情况)
2:安装 KVM 框架虚拟机。(杜甫才能选)
3:安装 XEN 框架虚拟机。(杜甫才能选)

有些版本的教程是有把面板和虚拟机装在一个 vps 里这个选项,但我这里centos7安装的时候没有。

输入2,回车。。。
当出现

 Installation Complete. Full install log: /tmp/install.log

 Add this hypervisor to your SolusVM master using the following details:

 ID Key .......... : 
 ID Password ..... : 

 IMPORTANT!! You are required to setup a network bridge before you can use KVM on this server
 Please see the following link: https://documentation.solusvm.com/display/DOCS/KVM+Bridge+Setup

即表示安装完成。

授权受控端

和授权控制端的方法一样

关闭selinux

按照上面的方法关闭selinux即可

添加ntfs支持

centos7默认移除了ntfs支持导致无法安装windows小鸡,我这个母鸡性能太弱还是不安装Windows吧,所以我就不支持ntfs算了,刚好避免用户dd使用windows。如果你的母鸡需要开Windows小鸡,就用这个方法

配置

控制端连接受控端

进入控制端的管理员面板,在Nodes > Add node处使用安装完受控端提示的KEY:PASSWORD连接受控端。
官方文档的图片如下
solusvm-add-node.png
注意:
1.不要填错虚拟化类型
2.KEY:PASSWORD别填错了
3.this is volume group name from partitioning part of the documentation意思是填分区时设置的卷组的名称,例如我创建的solusvm卷组

其他几项的解释:

Friendly Name :随便取个名字如:online
Type:类型,这里必须选 KVM。
License Type:执照类型,默认即可
Host Operating System:我这里是centos7.
IP Address:就是填你 VPS 的 ip 地址。不要填 8.8.8.8。
Internal IP Address:为了方便后面的 nat 设置,这里填写:10.0.1.1
Hostname:随便填,如:cve.pub
Network Interface:eth0(根据自己主网卡进行选择)
arch:选 64 位的。
county:(随意)
city:(随意)
Max VPS:就是你想开多少台小鸡。我这里开 16 台。
Max Memory:你的最大内存,可设置超过实际内存。超开。我设置的8192
Max Disk:你的最大硬盘,可设置超过实际硬盘。超开。我设置的51200

可以参考上图所示,官方文档的填法。

获取模板

前往

https://tdn.solusvm.com/

查找自己喜欢的模板

前往控制节点的服务器,我这里是virmach服务器,前往目录

/home/solusvm/kvm/template/

选择合适的KVM模板,下载到目录内。

我这里选择CentOS 7 64bit Minimal

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

下载完成后,使用这个方法在控制端注册模板

同步模板

需要使用这个方法将模板同步到所有节点

单IP-Nat网络地址转换

添加IP地址段信息

IP Blocks > Add IPv4 Block

SolusVM-addipblock.png

依次填入以下内容:

Block Name:区域名称
Gateway:默认网关 - 路由转发的出口地址
NetMask:子网掩码 - 对路由进行子网划分
Nameserver:主要DNS域名解析服务器
Nameserver:次要DNS域名解析服务器
DNS Server Group:DNS服务器分组(不重要)
Avaliable Nodes:选择分配的节点

记得选择自己的节点

设置子网节点地址

IP Blocks > Manage IP's 设置ip

SolusVM-addiprange.png

Add IP range:添加IP范围
Start IP:起始IP
End IP:结束IP

注意:起始IP到结束IP的范围内不能包含默认网关

设置IP地址转发

用这个脚本端口转发

#! /bin/bash
echo -e "Please input your server main ip"
        stty erase '^H' && read -p "(such as 8.8.8.8):" main_ip
        [[ -z "${main_ip}" ]] && echo -e "cancel..." && exit 1
echo -e "Please input how many /24 you want to use, max is 5"
        stty erase '^H' && read -p "(such as 1):" user_ip_num
        [[ -z "${user_ip_num}" ]] && echo -e "cancel..." && exit 1
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to ${main_ip} #修改eth0为你的主网卡名称
user_ip_head="10.0."  #修改此处为你的默认网关前2个点分十进制位
for (( c = 1; c <= ${user_ip_num}; c++ ));do
    for (( d = 1; d <= 255; d++ ));do
        user_ip=${user_ip_head}${c}"."${d}
        if (("$d" < 10)); then
            ssh_port="6"${c}"00"${d}
            user_port_first=${c}"00"${d}"0"
            user_port_last=${c}"00"${d}"9"
        elif (("$d" < 100)); then
            ssh_port="6"${c}"0"${d}
            user_port_first=${c}"0"${d}"0"
            user_port_last=${c}"0"${d}"9"
        else
            ssh_port="6"${c}${d}
            user_port_first=${c}${d}"0"
            user_port_last=${c}${d}"9"
        fi
        iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport ${ssh_port} -j DNAT --to-destination ${user_ip}:22  #修改eth0为你的主网卡名称
        iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport ${user_port_first}:${user_port_last} -j DNAT --to-destination ${user_ip}
        iptables -t nat -A PREROUTING -i eth0 -p udp -m udp --dport ${user_port_first}:${user_port_last} -j DNAT --to-destination ${user_ip}    
    done
done
service iptables save
service iptables restart
echo -e "It seems done"

检查NAT是否配置成功

iptables -t nat -L

SolusVM-iptables-nat.png

创建第一个VPS

添加用户

按照官方文档创建VPS


参考:
SolusVM Documentation
SolusVM开设Nat小鸡教程
SolusVM历险记-安装KVM被控
SolusVM主被控开心版完美安装配置傻瓜式教程
REHL6.1 安装 Solusvm 商业控制平台
Deploy ssl to SolusVM

最后修改:2020 年 09 月 14 日
如果觉得我的文章对你有用,请随意赞赏