利用ZKEYS被控搭建共享IP挂机宝,拨号IP挂机宝,共享网站云教程
/ 默认分类 / 共计 3 次评论

利用ZKEYS被控搭建共享IP挂机宝,拨号IP挂机宝,共享网站云教程

/ 默认分类 / 共计 3 次评论

准备工作:

小鸟云OEM账号 >>购买链接
购买小鸟云ZKEYS云服务器被控,1元/年
宿主机服务器 >>联系客服购买>
CPU:48核以上
内存:128G以上,注意客户机内存配置总和不可以超过此配置,超过需往上增加配置
双千兆网卡,推荐万兆
系统盘:100G以上,建议SSD
镜像模板盘:100G以上,根据提供的系统模板大小决定,建议SSD
客户机数据盘:2T以上,做Raid10,建议SSD
客户机数据备份盘:2T以上,大于等于客户机数据盘大小
CPU:80核以上
内存: 384G以上
网卡: 万兆网卡
硬盘: 120G固态硬盘
客户机数据盘,备份盘可以采用存储池
托管到机房或接入网络 >>千铭云398元托管
至少双网卡都接入网络,一个内网,另一个则为外网,可能需要自己托管交换机
需要技术人员 >>联系客服,找千铭哥

开始做系统,请查看官方教程 >>查看教程

宿主机请确保 BIOS 支持以及开启 VT-x 虚拟化支持
单台宿主机客户机数量不能超过64台

开始部署环境,请查看官方教程 >>查看教程

注意!教程里面的每一个字都很重要。
否则,后面可能会出现无法预料的错误。

开始部署内网路由,请务必完成以上步骤。

创建虚拟机的时候请注意

虚拟机设置

* 图中所示的Bridged模式就是vmnet0虚拟网卡
建议不要使用vmnet1到128虚拟网卡
以免被控可能会受到影响
vmnet1-64为公网,
vmnet65-128为内网
每台云服务器网卡分别对应
1=>65, 2=>66...64=>128
简单做法
复杂做法

爱快软路由配置

爱快管理面板

爱快管理面板

配置网卡

开始配置网卡

注意:共享IP挂机宝与拨号挂机宝配置不一样

共享IP挂机宝

* 搭建共享IP挂机宝
* 关闭软路由的DHCP,并启动mac地址绑定。以免出错.
* 操作前请先检查此内网IP段是否被其他服务器占用。以免造成IP冲突。
* 也可调整br0网卡为内网,不绑定物理网卡。这样即可避免以上错误。
* 但这里不推荐这样操作。因为部分机房不提供VNC和IPMI。很影响操作。
* br0与br1都为内网,不接入公网
* 软路由的网卡全部使用公网网卡
如图所示,添加端口映射
* 添加端口映射,如果宿主机为单IP,宿主机可使用内网IP
* 可配置多网卡,还可做网络负载均衡,使挂机宝网络更稳定。
* 以免客户机连接数大会影响其他客户机使用体验。建议限制连接数。

端口映射

配置宿主机端口映射规则
由于OEM云平台中客户机VNC连接,被控通讯
需要把59000-59999,7890映射给宿主机

端口设置

共享IP挂机宝端口映射规则
网关IP:192.168.1.254 #也软路由网关IP
将192.168.1.1-64的IP都添加映射端口.
#Linux服务器远程端口映射:
10001映射到192.168.1.1的22端口
...
10010映射到192.168.1.10的22端口
...
10064映射到192.168.1.64的22端口
#Windows服务器远程端口映射
20001映射到192.168.1.1的3389端口
...
20010映射到192.168.1.10的3389端口
...
20064映射到192.168.1.64的3389端口
...
自定义端口,一般建议8888,3306,1433 映射到对应的内网IP
根据客户群体定义。
30001 ... 192.168.1.1 8888端口....(随意端口)
40001 ... 192.168.1.1 3306端口....(随意端口)
50001 ... 192.168.1.1 1433端口....(随意端口)
该操作也可使用程序完成。
当然也可在浏览器的console面板输入js脚本完成此操作以节省时间。这里暂不提供代码

共享网站云方案

此方案在共享IP挂机宝基础上增加一台服务器即可
* 在此宿主机中搭建一台虚拟机,推荐使用CentOS 7.5,
* 推荐配置 4核4G 40G系统盘,无需存储盘
* 在软路由中把80和443端口映射到这台虚拟机的内网
* 安装原生nginx包或使用宝塔管理面板或APPNODE管理面板
* 在Nginx中,创建反向代理到内网客户机的80,443端口即可
* 有技术推荐使用python写接口,将该操作对接至OEM云平台

拨号IP挂机宝方案

虚拟机配置设置

* 多种方式实现,这里暂提一种
* 拨号IP挂机宝可使用VNC连接。也可使用上述映射端口方式连接。
* 安装爱快或使用CentOS做软路由教程同上
* 区别在于网卡
* 在这里软路虚拟机设置,公网网卡*1,内网网卡*1
* 建议新建两个网卡,public 与 private 
* public 接入 br0网络下
* private 接入 br1网络下
* 在宿主机命令行执行以下两行代码
ovs-vsctl add-port br0 public      #将public虚拟网卡绑定到br0上
ovs-vsctl add-port br1 private     #将private虚拟网卡绑定到br1上

* 软路由中配置网卡公网IP,和内网IP,

* 映射的时候还是以上面的规则映射,但是IP段变了
上述IP段为192.168.1.x,但在这里需要配置规则为10.168.1.x
配置宿主机端口映射规则
由于OEM云平台中客户机VNC连接,被控通讯
需要把59000-59999,7890映射给宿主机
拨号IP挂机宝端口映射规则
建议使用这套规则
网关IP:10.168.1.254 #也软路由网关IP
将10.168.1.1-64的IP都添加映射端口.
#Linux服务器远程端口映射:
10001映射到10.168.1.1的22端口
...
10010映射到10.168.1.10的22端口
...
10064映射到10.168.1.64的22端口
#Windows服务器远程端口映射
20001映射到10.168.1.1的3389端口
...
20010映射到10.168.1.10的3389端口
...
20064映射到10.168.1.64的3389端口
...
自定义端口,一般建议8888,3306,1433 映射到对应的内网IP
根据客户群体定义。
30001 ... 10.168.1.1 8888端口....(随意端口)
40001 ... 10.168.1.1 3306端口....(随意端口)
50001 ... 10.168.1.1 1433端口....(随意端口)
该操作也可使用程序完成。
当然也可在浏览器的console面板输入js脚本完成此操作以节省时间。这里暂不提供代码
开通拨号IP挂机宝后,可以使用VNC连接。也可以使用宿主机共享IP连接
当客户买到这个拨号IP挂机宝后,用远程桌面或者SSH连接上这台服务器。
* 服务器内拨号上网使用公网网卡,客户连接拨号IP挂机宝网络则使用内网网卡
然后在服务器里面进行拨号换IP操作
* 若机房为固定IP,切量足够大,可使用软路由自行搭建poppe服务器,
也可使用家庭宽带拨号

资源池录入,实现自助开挂机宝 >>教程在这里

添加IP的请注意!
无论是共享IP挂机宝还是拨号IP挂机宝,还是共享网站云,
请添加内网IP 192.168.1.1 - 64
这时候开出来的机子,
比如我的开了台服务器Windows服务器 IP为 192.168.1.60
那么用户连接挂机宝的时候就用宿主机的IP:端口去链接
例如:222.187.221.87:20060

修改OEM平台源码,由于某种原因,暂不提供源码

这里建议修改OEM平台源码使用户得到更好的体验,
判断列表中服务器为挂机宝,则显示宿主机IP:端口号;例如:222.187.221.87:10001
端口号以上述规则判断而来,显示给前端页面,减少数据库的修改。减少不可预料的错误.
若产品允许客户搭建网站,可在挂机宝管理页面加入新的按钮,绑定域名.填入域名绑定。
则调用宿主机内事先写好的nginx管理接口,
建议该域名绑定管理面板独立。以免OEM云平台升级,造成程序丢失
管理接口实现原理:输出一个名称为这个内网IP的反向代理配置文件至nginx/config.d/目录下.
然后nginx -s reload一下
配置内容见附录

搭建完毕后开始推销产品

8核8G 10M 120G硬盘 徐州100G高防 仅售100元/月 >>>点击购买
16核16G 20M 240G硬盘 徐州100G高防 仅售200元/月 >>>点击购买

附爱快批量添加端口映射C#源码 START

        static string url = "http://222.187.221.87:30001/";//软路由管理地址
        static string host="222.187.221.87";//如果管理地址绑定域名就填域名 没有的话填写IP
        static CookieContainer cookies = new CookieContainer();
        //程序入口
        static void Main(string[] args)
        {
            cookies.Add(new Cookie("sess_key", "d20b4de8b700698cfef854dbdccd7c92", "/",host));
            cookies.Add(new Cookie("username", "admin", "/",host));
            cookies.Add(new Cookie( "login", "1", "/",host));
            Insert();
        }
        //删除掉所有规则
        public static void Delete()
        {
            for (int i = 9; i < 1000; i++)
            {
                PostUrl(url, delete(i));
            }
           }
        //添加端口映射规则
        public static void Insert()
        {
            for (int i = 1; i < 65; i++)
            {
                string ip = "192.168.1." + i;
                if (i < 10)
                {
                    PostUrl(url, insert(ip, "1000" + i, "22"));
                    PostUrl(url, insert(ip, "2000" + i, "3389"));
                    PostUrl(url, insert(ip, "3000" + i, "8888"));
                    PostUrl(url, insert(ip, "4000" + i, "3306"));
                    PostUrl(url, insert(ip, "5000" + i, "1433"));
                }
                else if (i < 65)
                {
                    PostUrl(url, insert(ip, "100" + i, "22"));
                    PostUrl(url, insert(ip, "200" + i, "3389"));
                    PostUrl(url, insert(ip, "300" + i, "8888"));
                    PostUrl(url, insert(ip, "400" + i, "3306"));
                    PostUrl(url, insert(ip, "500" + i, "1433"));
                }
            }
        }
        //删除ID为x的端口映射规则
        public static string delete(int i) {
            string data = "{\"func_name\":\"dnat\",\"action\":\"del\",\"param\":{\"id\":{id}}}";
            return data.Replace("{id}",""+i);
        }
        // ip 内网IP地址 wanport公网端口 lanport 内网端口
        public static string insert(string ip,string wanport,string lanport) {
            string data = "{\"func_name\":\"dnat\",\"action\":\"add\",\"param\":{\"enabled\":\"yes\",\"comment\":\"\",\"interface\":\"all\",\"lan_addr\":\"{ip}\",\"protocol\":\"tcp+udp\",\"wan_port\":\"{wanport}\",\"lan_port\":\"{lanport}\"}}";

            return data.Replace("{ip}", ip).Replace("{wanport}", wanport).Replace("{lanport}", lanport);
        }
        /*
    *  url:POST请求地址
    *  postData:json格式的请求报文,例如:{"key1":"value1","key2":"value2"}
    */

        public static string PostUrl(string url, string postData)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url+"Action/call");
            req.Accept = "application/json, text/plain, */*";
            req.Method = "POST";
            req.Timeout = 8000;//设置请求超时时间,单位为毫秒
            req.ContentType = "application/json;charset=UTF-8";
            byte[] data = Encoding.UTF8.GetBytes(postData);
            req.ContentLength = data.Length;
            req.CookieContainer = cookies;
            req.Referer = url;
            req.Host = url.replace("http://","").replace("/","");
            req.Headers.Add("Origin", url);
            req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3534.4 Safari/537.36";
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            //获取响应内容
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            Console.WriteLine(postData);
            Console.WriteLine(result);
            return result;
        }

附Nginx反向代理配置文件模板

server
{
    listen 80;
    server_name chanmir.com www.chanmir.com;#这里的域名可以是多个,域名间空格分割
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/chanmir.com;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    #PROXY-START
    location ~ /purge(/.*) { 
        proxy_cache_purge cache_one $host$request_uri$is_args$args;
        #access_log  /www/wwwlogs/www.chanmir.com_purge_cache.log;
    }
    location / 
    {
        proxy_pass http://192.168.0.1;#这里填写内网IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
                
        #持久化连接相关配置
        #proxy_connect_timeout 30s;
        #proxy_read_timeout 86400s;
        #proxy_send_timeout 30s;
        #proxy_http_version 1.1;
        #proxy_set_header Upgrade $http_upgrade;
        #proxy_set_header Connection "upgrade";
        
        add_header X-Cache $upstream_cache_status;
        
        expires 12h;
    }
    
    location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
    {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_pass http://192.168.0.1;#这里填写内网IP
        
    }
    
    location ~ .*\.(html|htm|png|gif|jpeg|jpg|bmp|js|css)?$
    {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_pass http://192.168.0.1;#这里填写内网IP
        
        #缓存相关配置
        proxy_cache cache_one;
        proxy_cache_key $host$request_uri$is_args$args;
        proxy_cache_valid 200 304 301 302 1h;
        
        expires 24h;
    }
    #PROXY-END
    access_log  /www/wwwlogs/www.chanmir.com.log;
    error_log  /www/wwwlogs/www.chanmir.com.error.log;
}
  1. 平头哥观光到此一游

    回复
  2. OEM

    看完了,眼睛懂了,大脑不懂。

    回复
  3. OEM

    OEM大军来袭,寸草不生!

    回复