您现在的位置是:首页 > 诗句大全

如何使用闲置电脑制作服务器并且外网可访问

作者:淼淼时间:2024-03-28 15:05:35分类:诗句大全

简介  文章浏览阅读1.1w次,点赞26次,收藏162次。在家里用电脑制作服务,普通宽带的公网ip地址是动态变化的,如何在这种情况下穿透到外网去,如何做到动态变化也能正常访问_闲置电脑安装服务器

点击全文阅读

干货来了,分享一个自己用废弃笔记本制作服务器的过程。家里闲置了一台读书时候使用的笔记,已经很多年没有用过了,4G内存也不好用,扔掉又觉得可惜,卖也卖不掉,突然想到拿来制作一台服务器使用看行不行。

笔记本还是win7系统,要制作成linux系统来当作服务器更好使用

一. 安装linux系统

要安装系统我们可以使用u盘来制作一个系统启动盘

我使用的是Rufus - 轻松创建 USB 启动盘 这个工具制作启动盘

 

如果看文章的你此时已经无法访问这个网站了,我将下载好的工具包放到了csdn上你可以下载使用,或是去搜一下其他的工具。

 

地址:https://download.csdn.net/download/weixin_40754174/87760888

这个工具无需安装,双击即可使用

首先我们需要去下载linux系统镜像,我这里选择使用centos7的镜像,大家可以选择自己需要的系统镜像,不过安装过程可能有差别。

 

插入u盘,打开rufus软件

选择镜像文件->其他参数可以默认->点击开始

 

其他提示默认即可

 

开始制作:复制文件的过程比较久

 

复制完毕后关闭即可

 

u盘启动盘就制作好了,然后就可以把u盘插到我的旧笔记本上,启动电脑进入bios模式,每个品牌的电脑进去bios模式可能不一样,我这里是在启动界面按F2进入,进入后移动到boot页面

回车进入启动顺序调整页面

选择启动系统盘顺序,把u盘的选项放到前面,按F10保存重启即可进入u盘启动页面。

 

 

选择 Install CentOS 7 回车 安装开始

 

输出一大堆之后,进入系统配置页面,选择语言

 

然后选择要安装的系统磁盘

 

这里选择磁盘,第一个是u盘别选错了

提示磁盘空间不足,点击Reclaim space回收空间

删除全部

回到安装页面,点击开始安装

安装过程中,我们可以设置一下用户密码,这里我设置一下root用户密码即可

然后就等待安装完成。

二. 网络设置

安装完成后无法连接网络,在网上搜索各种解决方案,大概意思就是需要安装无线网卡、配置无线网卡,没有过多去研究这个,因为要用来做服务器,直接插网线会比较稳定,插入网线后可以正常上网。

如果你还是无法上网,通过ip addr命令可以查看有哪些网卡地址

我的是叫enp3s0,如果statue状态是DOWN的话,你可以输入ifup enp3s0 启动网卡。

你的网卡不会是这个名字,你可以根据ip地址192.168.xx.xx判断哪个是你联网线的地址。

进入/etc/sysconfig/network-scripts/ 目录下可以看到你的网卡配置文件

 

是以ifcfg-开头的配置文件

输入命令 vi ifcfg-enp3s0    编辑该配置文件,如图:

BOOTPROTO = static 表示静态ip,默认是动态的,你的电脑连上路由器后每次会动态分配ip地址,我们要做服务器肯定需要把ip固定下来,所以这里需要设置为静态ip

GATEWAY 是网关地址,需要登录路由器管理页面进行设置,在系统设置->局域网设置里面,路由器不同有些许不同,但目的就是设置一下路由器的ip,以及设置局域网内的ip地址范围:

 

IPADDR设置的地址需要在上图的ip地址分配范围内。

DNS可以设置多个,需要设置DNS才能上网,8.8.8.8是谷歌提供的DNS服务器

ONBOOT 表示开机启动该网卡。

这样就可以正常上网,且每次开机都是一个固定的局域网内ip地址了,现在你在局域网内就可以通过192.168.7.77来访问这台电脑。

三. 如何远程连接服务器

这里推荐使用FinalShell这个连接工具,比较好用。

 

 

你可能输入ip和端口却无法连接,不用慌,那是因为防火墙。

查看防火墙状态: systemctl status firewalld.service

 

绿色的running表示防火墙开启。

如果你不考虑其他安全问题,你可以直接关闭防火墙就能连接了。

关闭防火墙: systemctl stop firewalld.service

再次执行查看防火墙命令:systemctl status firewalld.service

执行开机禁用防火墙自启命令  : systemctl disable firewalld.service

但是建议大家还是开启防火墙,这是一道网络保护,因为我们后面还有映射到公网上去。

开启防火墙状态下就需要配置防火墙规则,添加可以访问的端口。

开放指定端口

firewall-cmd --zone=public --add-port=22/tcp --permanent

命令含义:

--zone #作用域

--add-port=22/tcp #添加端口,格式为:端口/通讯协议

--permanent #永久生效,没有此参数重启后失效

重启防火墙 (添加端口后必须重启,不然你还是访问不了)

firewall-cmd --reload

删除端口 (删除的命令也写下来,如果添加错误了可以删除)

firewall-cmd --zone=public --remove-port=xxx/tcp --permanent

查看开启的端口: firewall-cmd --zone=public --list-ports

 

四. 如何在外网访问服务器

上面我们已经能够在局域网内访问自己的服务器了,但是还无法在外网访问,等于说你只能在你家里使用,而且部署了应用也只能在家里访问,那有什么意义呢,所以下面教大家如何拐个弯使用外网也能访问到,而且不需要你去搞比较贵的类似花生壳之类的内网穿透工具,而且还有流量限制,也不需要拉专线固定ip地址。

首先,我们需要宽带分配的ip地址是公网ip地址,因为现在很多宽带都是给的虚拟ip地址,虚拟ip是无法访问到的,电信宽带是可以打10000号要求客服修改为公网ip,我家里是用的电信,不知道其他运营商能不能给公网ip。

怎么看是否是公网ip呢,直接打开百度搜索ip,这个ip就是公网ip地址

 

再打开路由器管理页面查看WAN口ip

 

如果WAN口ip与百度搜索的公网ip地址一样,你的宽带分配的就是公网ip,否则就是虚拟ip。

有了公网ip后,我们需要设置内外网端口映射,进入宽带管理页面,将虚拟服务器中添加端口映射就可以了,比如你需要ssh到服务器上, 你就将外网端口22映射到你的这台电脑ip上的22端口即可。

我的路由器配置截图:

 

这样配置了后,就可以在外网通过公网ip地址进行ssh(22端口)连接了,我这里还配置了其他端口8000用于web服务,3306用于mysql数据库。

如图:用公网ip地址连接

 

但是普通宽带的公网ip地址是动态变化的,一段时间后即使你没有重启路由器他还是会变化,只有专线宽带的ip才是固定的,这样一旦ip地址变化了我们就无法连接和访问了,网上有很多内网穿透工具,比如收费的花生壳,还有免费的ngork,frp等等,大家都可以去试试,我用了ngork,之前也用过花生壳,但都觉得不爽,免费的不稳定,收费的又太贵。于是我想到一个方法,利用阿里云域名做自动的ddns解析。

五. 阿里云域名动态ddns

首先去阿里云买一个域名,可以买个便宜后缀的,比如.top

进入阿里云域名购买,输入你想要注册的域名

 

我买了个.top的域名,直接买了10年,才188。

 

买域名需要实名认证,然后才能解析,进入解析页面

 

添加一条记录,映射到你当前的ip地址,等解析正常了就可以用这个域名去访问你的服务器了。

如图:

 

也就是说,我们只要能实现,当ip地址变化后,能自己将变化后的ip地址解析到这个域名上,那我们就可以使用域名来访问服务器,使用域名来访问我们部署的服务页面等等。

正好,阿里云提供了这个接口来进行域名解析修改

文档地址:如何调用UpdateDomainRecord根据传入参数修改解析记录_云解析DNS-阿里云帮助中心

 

所以思路就是: 写一个程序放在我们的服务器上,定时去获取公网ip地址(时间间隔根据你自己需要来设定,经过我这几天的观察,其实公网ip地址变化频率并不高,有可能几天都不变化一次,也有几小时就变化一次的情况), 我设置了个5分钟的定时任务去获取公网ip地址,然后通过调用阿里云的api接口修改域名解析。

我这里使用的是java来开发定时任务。

关键代码如下:

public void refreshDdns(String currentIp) throws Exception {

    // 获取解析记录

    DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord domainDnsRecord = this.getDomainDnsRecord();

    String currentDdnsIp = "";

    currentDdnsIp = domainDnsRecord.value;

    if (!currentDdnsIp.equals(currentIp)){

        // 刷新解析记录

        this.updateDomainDnsRecord(domainDnsRecord,currentIp);

    } else {

        logger.info("无需修改解析记录,当前IP:{}",currentIp);

    }

}

private DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord getDomainDnsRecord() throws Exception {

    DescribeDomainRecordsRequest describeDomainRecordsRequest = new DescribeDomainRecordsRequest()

            .setDomainName(domain);

    // 获取记录详情

    DescribeDomainRecordsResponse domainRecordsResponse = client.describeDomainRecords(describeDomainRecordsRequest);

    List<DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord> records = domainRecordsResponse.getBody().getDomainRecords().getRecord();

    DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord record = records.get(0);

    logger.info("获取解析记录:{}", JSON.toJSONString(record));

    return record;

}

private void updateDomainDnsRecord(DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord domainDnsRecord,String newIp) throws Exception {

    // 修改记录

    UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest()

            .setRecordId(domainDnsRecord.getRecordId())

            .setRR(domainDnsRecord.getRR())

            .setType(domainDnsRecord.getType())

            .setValue(newIp);

    // 修改记录

    UpdateDomainRecordResponse updateDomainRecordResponse = client.updateDomainRecord(updateDomainRecordRequest);

    logger.info("修改解析结果:{}",JSON.toJSONString(updateDomainRecordResponse));

}

运行下来结果很满意,能在外网随时访问到家里的服务器和应用。

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句