内网穿透-公网访问家庭内网
一、为什么需要内网穿透
相信学过计算机网络知识的同学都知道,因为IPV4地址的稀缺性,局域网内的电脑通过路由器上网时,是需要经过NAT转换为公网ip的,而电脑被分配到的私有ip一般是192.168.x.x(注:电脑ip地址查看可以通过ifconfig(Linux系统)或ipconfig(windows)系统命令查看),而在公网中的另一台电脑要访问该电脑时,该电脑没有公网ip地址,是无法直接访问的,所以需要用到内网穿透技术。
二、解决方案
使用路由器的端口转发功能(仅针对电信网络有效)
基本原理是让路由器获得一个公网ip,然后使用路由器的端口转发功能,让访问路由器ip+特定端口的请求转发到指定的局域网内电脑ip和端口上
1. 首先你需要一台具有端口转发功能的路由器,登录路由器管理界面,进入高级设置页面,确定路由器有虚拟服务器(或者类似名称)选项:
2. 更改路由器的上网模式:现在电信宽带光猫一般都自带拨号和无线上网功能,当使用光猫的自动拨号功能连接宽带时,光猫本身获得了公网ip,光猫后面接的路由器分配到的便是光猫指定的私有ip。可是光猫又不具有端口转发功能,而路由器因为没有公网ip也无法实现端口转发功能。登录路由器管理界面,进入高级设置页面,点击WAN口设置,查看详情:
我的路由器已经被我更改成了拨号上网的方式,如果路由器是自动获得ip方式的上网,那么需要拨打电信客服电话,告诉工作人员将光猫上网方式由路由器模式改为桥接模式。然后修改WAN口设置,修改连接类型,填上自己的宽带账号的密码进行拨号连接。
3. 更改ip为公网ip:因为ipv4地址资源紧张,运营商分配给我们的上网ip地址其实是一个经过转换过的私有ip地址,也就是路由器并没有公网ip地址。需要拨打电信客服电话,告诉他们让其分配一个公网ip(只有电信可以,联通和移动不行,会告知没有这项业务)。
4. 添加端口转发功能:当以上步骤完成后,进入理由器管理界面,选择虚拟服务器选项,添加转发规则:
上图中规则含义:当外部网络访问路由器ip地址+9999端口时,转发到内网192.168.0.101机器的22端口上。
5. 测试:首先打开http://www.ip138.com/网站,此时可以看到自己的公网ip,然后打开操作系统的命令行窗口,使用telnet命令:telnet 你的公网ip 外部端口,如果能够连接成功,证明全部设置已经成功。
6. 做完上述步骤后,虽然已经实现了内网穿透功能,但是有两个缺点,1:ip地址难以记忆,没有域名好记,2:虽然分配了公网ip,但是每隔两三天ip就会变化一次,不固定。此时就需要用到动态域名解析功能,即将固定域名指向动态变化的ip。配置动态域名解析由两种方式,第一种是花生壳的动态域名解析,第二种是使用阿里云的动态域名解析功能。在这里我介绍第二种方式。
7. 使用阿里云动态域名解析步骤:
使用阿里云动态域名的原理是通过阿里云提供的sdk api,在程序中将购买的阿里云域名映射到我们自己的公网ip,每隔一段时间检测自己的公网ip有无变化,如果有变化,则调用程序更新映射。
1). 购买一个阿里云的万网域名,年费在40元左右。且被访问的电脑运行的是centos/redhat系统(这种场景也非常合理,很多时候我们需要访问家里电脑,是因为我们在上面部署了一些web服务应用,所以需要运行centos系统)
2). 安装python-pip:
yum -y install epel-release
yum -y install python-pip
3). 安装阿里dns python-sdk:
sudo pip install aliyun-python-sdk-alidns
4). 克隆我的github项目——DynamicDNS到本地机器:
git clone https://github.com/aiwangzhe/DynamicDNS.git
5). 登录阿里云官网,点击自己账户信息,找到accesskeys选项,点击进去获取到自己的accessid和密码:
打开DynamicDNS工程下的AliRequest.py文件,找到getAcsClient()方法替换里面的accessid和密码:
def getAcsClient():return AcsClient("your access id", " your access token")
找到AliRequest.py文件中的main方法,将下面内容替换为自己的域名:
# TODO replace your domain name
recordId = getDomainRecordId("your domain name", "www")
然后执行sh UpdateIP.sh命令,命令执行成功后,会在用户home目录下生成Last_IP.txt文件,里面记录了当前机器最新的公网ip。登录阿里云的管理控制台,点击云解析DNS选项,可以看到域名已被映射到新的ip:
6). 添加定时任务:虽然执行sh UpdateIP.sh命令成功更新了域名到ip的映射,但是因为公网ip会经常变化,所以需要将该命令添加到linux定时任务中,定时更新ip。打开工程目录下的CheckIpTask.cron文件:
*/5 * * * * sh /home/wangzhe/DynamicDNS/UpdateIP.sh
内容含义为每5分钟执行一次UpdateIP.sh脚本,该脚本会先去检测公网ip是否已发生变化,如果发生了变化则调用阿里云sdk更新域名映射。读者需要先替换UpdateIP.sh文件路径为自己的真实路径,然后使用crontab CheckIpTask.cron命令,将其添加到定时任务中。至此大功告成
内网穿透-公网访问家庭内网相关推荐
- CentOS7内网穿透(公网访问内网)SakuraFrp-frpc配置(从0开始)
CentOS7樱花内网穿透(公网访问内网)SakuraFrp-frpc配置 初始环境 1:一台装好的linux系统(我这里使用的是centOS7) centOS7U盘安装 2:确保你的linux系统的 ...
- 使用ngrok对黑群晖进行内网穿透/公网访问
使用ngrok对群晖进行内网穿透 一.注册ngrok 二.上传ngrok安装包到nas 三.SSH连接到nas并配置ngrok 前言: zzzz黑群晖不洗白无法进行公网访问,现在洗白貌似有比较难搞,所 ...
- windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】
自己用Windows Server搭建了家用NAS主机,WebDAV的文件共享方式当然也是必不可少的. 本文使用的是WIN10 专业版. 1. 安装IIS必要WebDav组件 1.1 打开控制面板,查 ...
- 【轻NAS】Windows搭建可道云私有云盘,并内网穿透公网访问
文章目录 1.前言 2. Kodcloud网站搭建 2.1. Kodcloud下载和安装 2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册 4. 本地网页发布 4.1 Cpol ...
- 【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机
文章目录 前言 1.Mcsmanager安装 2.创建Minecraft服务器 3.本地测试联机 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射内网端口 5.远程联机测试 6. ...
- 搭建内网穿透实现访问windows远程桌面
搭建内网穿透实现访问windows远程桌面 开源的内网穿透软件有很多,如 frp和nps frp github地址:https://github.com/fatedier/frp nps github ...
- frp内网穿透-公网IP低成本使用高性能kali
frp内网穿透-公网IP低成本使用高性能kali 1.frp Github项目地址:https://github.com/fatedier/frp 找到最新的releases下载,系统版本自行确认. ...
- 搭建ngrok服务器,实现内网穿透服务,实现外网到内网的在线访问
一:前言 场景问题: 如果本地的项目在没有服务器的情况下,需要让他人访问: 在自己的电脑上搭建一个web服务器,实现本地的访问和外部的访问.我们就要做内网穿透了,内网穿透就是别人通过外网能够访问到我们 ...
- 远程办公利器——利用cpolar内网穿透在家远程公司内网电脑
系列文章 Windows用户如何安装使用cpolar内网穿透? Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动? 远程办公利器--利用cpolar内网穿透在家远程公司内 ...
最新文章
- 在CentOS 6.3 64bit上安装ActiveMQ 5.15.9实录
- 还原时代原声,AI修复老北京再次火爆全网
- Mysql练习题15-给定数字的频率查询中位数
- storm能不能测试wadl_情感测试:4朵玫瑰花,哪个会最扎手?测你婚后能不能享住TA?...
- yshon对讲机如何调频率_99%的人都不知道对讲机的这些功能.....
- [YTU]_2906( 多重继承 日期与时间)
- mysql 数据库名称限制_mysql 数据库名称限制
- spring-kafka整合:KafkaTemplate-kafka模板类介绍
- python中函数包括参数函数吗_Python中的函数---函数的定义和参数
- sublime怎么运行go_使用SublimeGDB调试Go程序
- 程序员私活app排行_iOS程序员,失业就等于成为废人?
- I2C driver编写常用接口
- JS - 移动设备终端的touch事件
- Qt笔记8--zlib实现gzip解压
- JavaScript是什么?看着一篇就够了
- Wget 下载 ILSVRC12 数据集
- 倒写的乘法口诀表用c语言表示,乘法口诀表,C语言实现
- 7-1 六度空间(30 分)
- 球员岁月齐祖辉煌,执教生涯尤胜当年
- Python3.7出现RuntimeError: generator raised StopIteration异常
热门文章
- 金蝶使用mysql_金蝶财务软件中的数据库如何进入?
- 盘点教的好、口碑好的Web前端培训班
- 百万英雄类答题游戏的程序员打开方式
- 团购模式的持久性--看书《九败一胜》
- Linux Deepin蓝牙更新内核后无法使用的问题的各种方法尝试-service\heitool\hciconfig\blueman
- 计算机机器人游戏教学计划,机器人教学计划.docx
- 装备制造业解决方案,实现供应链的产供销,智能化、协同化、平台化
- java 新手入门电子书_Java基础入门指导(适合所有初学者).pdf
- Visual Studio 2022 的下载
- Leetcode917:仅仅反转字母(simple)