nps内网穿透
首先进入到服务器的管理页面,以腾讯云为例(我只有腾讯云的服务器)
点击镜像信息里的重装系统,将服务器重装成centos的系统(7.6, 8.0和8.2的都可以),如果你习惯Ubuntu或者debain也行
重装完成后点实例里重置密码,接着就可以用ssh工具连接到这台服务器了,用户名root,密码就是重置后的密码
为了避免后面频繁的添加端口规则,可以直接在防火墙一栏放通全部端口。如果怕被入侵还是老老实实用一个加一个
用ssh连接工具登录这台服务器,登上去第一件事是干嘛呢,当然是运行yum update -y
了。然后可以装一个宝塔,这工具我还是很喜欢的,简化了一些步骤。一键安装命令:yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
,安装完成后通过外网面板地址进入到管理页面改入口地址和账号密码
接着去 https://github.com/ehang-io/nps/releases 下一个linux_amd64_server.tar.gz
上传到服务器,也可以使用宝塔的远程下载
下载完成后直接用宝塔解压。可以看看nps的官方文档,还是很详细的,而且是中文的。https://ehang-io.github.io/nps/#/?id=nps
解压完成的用ssh工具运行cd /www/wwwroot/
和./nps install
接着编辑nps的配置文件 /etc/nps/conf/nps.conf
,宝塔和vim都可以。主要改端口,用户名和密码。域名有的话也可以改
改完之后运行nps start
启动nps,然后firewall-cmd --zone=public --add-port=8080/tcp --permanent
开放端口(注意端口修改成上面配置文件的端口)
在开放一下8024这个端口,也是nps的。可以在配置文件中修改 firewall-cmd --zone=public --add-port=8024/tcp --permanent
firewall-cmd --reload
重新加载防火墙生效
接着就可以通过ip:端口访问nps的登录界面了,在客户端界面添加一个,备注改一下,其他都可以默认
./npc -server=ip:8024 -vkey=iy1o9dolt0ujpclv -type=tcp
下面那个客户端命令就是需要在被远程的电脑上运行的
还是在这个页面https://github.com/ehang-io/nps/releases下载win的客户端windows_amd64_client.tar.gz
,解压后里面的npc.exe就是需要的了,
直接运行在cmd下运行npc.exe -server=ip:8024 -vkey=iy1o9dolt0ujpclv -type=tcp
就可以在nps管理界面看到客户端从离线变成了在线了。(注意修改命令中的ip为自己的ip或者域名)
作为服务运行
运行npc.exe install -server=ip:8024 -vkey=iy1o9dolt0ujpclv -type=tcp
会创建一个服务(注意修改命令中的ip为自己的ip或者域名)
然后npc.exe start
启动这个服务,这样每次开机都会自动启动
创建端口映射
新增tcp隧道,客户端id就是客户端那一栏的id,第一个创建的一般是2
放行服务器端口
firewall-cmd --zone=public --add-port=33890/tcp --permanent
firewall-cmd --reload
接着就可以用win自带远程连接ip:33890了
问题
1、服务器8M带宽会不会卡
不会,很流畅,基本不会有卡顿的情况,但是和本地还是有区别的。其实微软自带的远程已经优化的很好了,占不了太多的带宽,我估计4-5M就够了
2、这么麻烦,还不如用xxx
你喜欢用啥就用啥呗,我也没拿刀架你脖子上,没必要说一句吧
公网直连
宽带设置
首先宽带需要自己办的,然后问办宽带的能不能给公网IP,一般是不能,看地方和运营商,有些是会额外收费。有公网IP后,还需要将光猫改成桥接,用路由器拨号(改光猫需要让办宽带的弄,他们可以远程弄)。另外,喜欢折腾的可以搜索光猫牌子型号,看有没有提权的漏洞,普通玩家不建议这么玩。
路由器设置
上网方式需要选择宽带拨号,之后填写账号密码即可
然后是DHCP服务,这是路由器用来绑定IP和设备mac,只要设备mac不变,路由器分配给设备的内网地址也不会变。正常情况下不固定也不会变,具体看路由器。
接着是端口转发,也就将路由器收到的端口请求转发到内网的某台机器,比如将内网中路由器的33890端口的请求转发到192.168.2.218:3389。这个名称根据路由器的不同可能不一样,比如有的叫端口映射。此时访问路由器的公网IP:33890就可以连接到内网的电脑了
扩展
提一个有意思的功能,dmz主机。是将路由器收到的所有请求转发到设置的dmz主机上,比如你上面不设置端口转发,然后将dmz主机设置为192.168.2.218,那么你公网ip:3389就可以直接连接到这台电脑,其他端口也是一样的。
为什么有端口转发还需要这个呢?因为端口转发数量是有限的,我的路由器只能设置几条转发规则。如果这样设置的话,这个内网电脑就可以完全跟公网IP关联了,也就等同于一台完整的服务器了。(当然80,443,8080这些端口都已经被运营商封了)
同时设置了端口转发和dzm主机会优先端口转发。转发规则没有的才会转发到dmz主机上。
ddns
运营商分配的公网IP一般都会变的,所以需要用ddns动态解析到域名上,每隔几分钟获取一次公网IP,判断是否变了,如果没变就什么都不做,变了就将新的IP解析到域名上
我之前用的是自己写的Python脚本,域名是腾讯云的,腾讯云有http解析域名的接口。
这是相关文档:https://www.dnspod.cn/docs/records.html
id和token获取:https://docs.dnspod.cn/account/5f2d466de8320f1a740d9ff3/
Python脚本如下:
import json
import requestsclass DDNS:def __init__(self, _id, token):self.data = {'login_token': f"{_id},{token}", 'format': 'json'}def updateRecord(self, domain):ip = self.getIP()if not ip:print("获取本地IP失败!")return _id, _ip = self.getRecordIP(domain)if(_ip != ip):print(f"本地IP:{ip}, DNS记录: {_ip}")self.modifyRecordIP(domain, _id, ip)else:print("IP未变动,不进行任何操作!")def getIP(self):url = "http://ip.03k.org"try:resp = requests.get(url, timeout=30)except:return Nonereturn resp.textdef checkAPI(self):url = "https://dnsapi.cn/Info.Version"try:resp = requests.post(url, data=self.data, timeout=30)except Exception as e:print(e)return Falsereturn resp.json().get("status").get("code")def getUserLog(self):url = "https://dnsapi.cn/User.Log"try:resp = requests.post(url, data=self.data, timeout=30)except Exception as e:print(e)return Falsereturn resp.json()def getRecordIP(self, domain, sub_domain="www", record_type="A"):url = "https://dnsapi.cn/Record.List"data = self.data.copy()data["domain"] = domaindata["sub_domain"] = sub_domaindata["record_type"] = record_typetry:resp = requests.post(url, data=data, timeout=30)except Exception as e:print(e) return (0, None)d = resp.json()if d.get("status") and d.get("status").get("code"):records = d.get("records")return records[0]["id"], records[0]["value"] if records else (0, None)else:return (0, None)def modifyRecordIP(self, domain, record_id, value, sub_domain="www", record_type="A"):url = "https://dnsapi.cn/Record.Modify"data = {"domain": domain, "record_id": record_id, "sub_domain": sub_domain,"record_type": record_type, "record_line": "默认", 'value': value,"ttl": 600, }data.update(self.data)try:resp = requests.post(url, data=data, timeout=30)except Exception as e:print(e) return (0, None)d = resp.json()print('修改记录结果:', d)return d.get("status").get("code") if __name__ == "__main__":_id = 111111token = "xxxxxxxxxxxxxxxxxx"dd = DDNS(_id, token)domain = "baidu.com"dd.updateRecord(domain)
ipv6直连
这种方法其实很早就有了,我稍微提一下,我也没试过。
其实很早之前就有人提出了个新概念ipv6,而且电脑也早就支持,从网卡属性就可以看出来。大部分高校的校
园
网也很早就支持ipv6了,大学时还能看到一些ipv6免费使用校园网这些文章。
但是这东西现在局限性很大,对于大部分人来说都挺鸡肋的。限制条件如下:
1、运营商支持(通信两边都需要支持)
2、路由器支持(通信两边都需要支持)
3、dns支持(如果想要用域名连接,不过,现在很多域名提供商都可以解析ipv6了)
因为ipv6和ipv4协议并不互通,所有要用ipv6通信,就必须双方都是。虽然现在大部分APP或者网站说已经支持,其实也只是支持而已。你如果禁用ipv4,还是打不开,或者能打开但是样式乱了,功能不能完全使用等。这种是因为他某些服务确实有ipv6的服务器,并不是所有的服务器都已经换了,只是为了应工信部的要求。
可以这么说,只要nat技术还能用,ipv6很难完全取代ipv4,至少在最近的几十年里。原因只有一个字:钱。要完成取代的话,那么之前的所有网络设备都用不了,谁来承担这个损失?普通用户肯定不能接受,你给我提供的服务啥也没变,就给了个公网IP,我可能都用不到,还要我付那么大一笔钱给你。运营商也不能接受,我也不是慈善机构。那么公司肯定也不能接受,你说换就换,我的网络设备损失谁来承担。所以要完全过渡,需要慢慢的更换,这是个很长的过程
如果只是用于远程连接的话,这东西还是有点用的,因为我们只需要保证远程的电脑和被远程的电脑满足条件。打开测试网站就可以看到电脑是否支持了,https://www.test-ipv6.com/
如果看到这种,只是说明你电脑没有被分配ipv6地址,可能是路由器不支持。可以用网线直连光猫再试一下,如果有了那就是路由器不支持,我在恩山看到某些路由器可以通过刷一些特殊的固件来支持,当然我也没试过。如果直连光猫都没有检测到,那就只能向你的运营商咨询了。(我之前还问了办宽带的,为什么没有ipv6地址,不是说普及了?然后就被喷了,谁告诉你ipv6普及了,然后就没有然后了)
如果公司电脑也是这种情况,那就没办法,换其他办法吧。你总不可能跟运维说,给我整个ipv6。
两边都能检测到ipv6地址,就可以使用这个IP远程连接了,步骤和其他的一样。