原创

使用家用电脑作为服务器·2023年新版

温馨提示:
本文最后更新于 2023年02月23日,已超过 373 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

在19年,我写过一篇使用家用电脑作为服务器的文章,那时候没有解决ddns问题,目前已经解决

为什么要用家用电脑做服务器

1:跑满家用带宽(上行30M-50M,有的100M,阿里云4000-1万一个月),下行100M-1000M(看自己)
2:成本低,服务器2核2g就得几百一年,自己电脑随便加内存,随便加硬盘
3:装逼,别人没有你有
4:服务器集群测试,学习服务器运维最好的帮手
5:出租,出租给别人用,美滋滋
6:做游戏私服
7:做私有网盘
8:做代码备份
.....

开通公网

必须要找运营商开通公网ip,我家是电信的,找电信人工服务开通公网,重启路由器就行,免费的!免费的!免费的!免费的!免费的!
免费的!免费的!免费的!

如何判断开通了公网ip?

需要在拨号的路由器上查看ip地址,如果ip地址和对外访问的ip地址一致 (或者ip地址不是内网ip地址) 则是开通了公网
file

百度ip:则可以知道自己的ip地址是什么

路由器设置方案

现在大多数家庭都是光纤->光猫,所以如果需要配置路由器的话,还需要配置光猫
分为2种方案:

  • 光猫拨号,路由器dhcp作为光猫的副路由
  • 光猫做桥接模式,光猫只负责做光信号转换,用路由器拨号并负责网络

本人建议使用光猫做桥接模式,光猫性能较差,用路由器可以压榨极致性能,通过有些地区可以桥接多个路由器,做多拨,带宽翻倍!

光猫如何做桥接模式?

这里又有两种方案,
你可以通过打电话给运营商,让客服远程帮你修改光猫的模式,修改完重启即可让路由器拨号 (一般只有21年新开通的宽带才有这功能)

如果没法远程修改光猫的模式,你可以通过破解光猫的超级管理员账号,进入后台自己修改

服务器相关

选择硬件

我们选择服务器,个人建议使用N5105小主机,性能够,功耗极低,不费电!
要知道,服务器是24小时运行的,一般台式机待机功率就有100w以上了,加上满载,一天5度电,电费就吃不消了

N5105性能不错,功率低,但是价格要1000多,本人买不起,所以选择了闲鱼花500买笔记本

值得一提的是,家用服务器,cpu性能不用太强,又不是打游戏办公,主要是低功耗,加上3G以上的睿频就非常好用了,硬盘和内存可以多一点
有条件的还可以研究下bios里面的网络唤醒功能,只要有网络即可自动开关机,非常好用

选择系统

在这里,本人选择的是ubuntu22系统,直接去官网下载镜像,然后U盘安装即可,装系统不发教程

另外,前阵子了解到了另一个牛逼的系统:pve系统,个人建议安装这个,自己百度看看

网络配置

要注意的是,服务器网络配置,需要使用路由器的 mac地址绑定+dmz主机功能

mac地址绑定

file
在路由器绑定mac地址和ip地址,才能让服务器的ip不至于一直被dhcp更改,

dmz主机功能

dmz主机功能,可以将访问到路由器的流量全部中转到服务器上,也就是相当于直接访问的服务器

如果你是光猫dhcp给路由器的,需要做双重dmz主机,光猫dmz主机到路由器,然后路由器dmz到服务器,如果你路由器还dhcp了路由器,以此类推

file

DDNS

到这步,你已经可以通过外网ip直接访问到服务器了,但是,由于运营商限制,端口80,443,8080,都被禁止,但是你可以通过其他端口来访问服务器,例如22 ssh,或者自定义9999,8888作为网页访问:
file

但是,由于这个ip是运营商拨号后给你分配的,每次重新拨号,或者运营商不定时网络波动,都会造成ip变更,此时你在公司,家里的ip变更了,你怎么知道变更的ip呢?

这个问题你们可以自己思考下,变更后发邮件什么都可以,最简单的方案就是DDNS 动态域名解析方案

动态域名解析方案

阿里云云解析

首先,我们需要有个域名,最好是直接阿里云买一个,然后找到云解析:
file

如果不是阿里云买的域名,也可以在这里添加解析,然后在自己购买的运营商后台修改DNS服务器为阿里云DNS服务器:
file

此时就可以在阿里云云解析操作解析的域名了
在阿里云新增解析,a记录,*,\@ 2个解析记录(随你选择):
file

打开f12控制台,找到file

这个是阿里云的云解析记录资源id

执行脚本

由于阿里云的资源管理比较牛逼,全部可以使用api方式请求变更,找到云解析的api文档,根据文档写代码:https://help.aliyun.com/document_detail/29774.html

本人使用的go代码

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"

    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
    alidns "github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
)

func main() {
    config := sdk.NewConfig()

    credential := credentials.NewAccessKeyCredential("accessid", "accesskey")//这里填自己的
    /* use STS Token
    credential := credentials.NewStsTokenCredential("<your-access-key-id>", "<your-access-key-secret>", "<your-sts-token>")
    */
    client, err := alidns.NewClientWithOptions("cn-qingdao", config, credential)
    if err != nil {
        panic(err)
    }

    request := alidns.CreateUpdateDomainRecordRequest()

    request.Scheme = "https"
//填自己的资源id
    request.RR = "*"
    request.Type = "A"
    request.Value = getIp()

    response, err := client.UpdateDomainRecord(request)
    if err != nil {
        fmt.Print(err.Error())
    }
    fmt.Printf("response is %#v\n", response.GetHttpContentString())
}

func getIp() string {
    // 基本get请求
    resp, err := http.Get("http://ifconfig.me")
    if err != nil {
        log.Println("err")
    }
    defer resp.Body.Close()
    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Println("err")
    }
    return string(b)
}

然后,通过crontab 定时任务,设置每分钟执行一次,如果ip发生变化,就会自动修改ip
file

再然后,我们以后只需要根据自己的域名来访问自己的服务器即可,不需要记ip了

其他

推荐个网盘工具,可以部署到自己服务器:

https://kodcloud.com/

推荐宝塔,可以部署到自己服务器,反正是自己服务器,不怕安全问题

有些地区,光猫桥接之后,多插几个路由器可以实现多拨,也就是说一个宽带账号,可以搞多个网络出来,再加个牛逼的交换机,给服务器多倍带宽,嘎嘎猛

自己想在服务器干啥就干啥

正文到此结束
本文目录