一、为什么需要内网穿透

相信学过计算机网络知识的同学都知道,因为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命令,将其添加到定时任务中。至此大功告成

内网穿透-公网访问家庭内网相关推荐

  1. CentOS7内网穿透(公网访问内网)SakuraFrp-frpc配置(从0开始)

    CentOS7樱花内网穿透(公网访问内网)SakuraFrp-frpc配置 初始环境 1:一台装好的linux系统(我这里使用的是centOS7) centOS7U盘安装 2:确保你的linux系统的 ...

  2. 使用ngrok对黑群晖进行内网穿透/公网访问

    使用ngrok对群晖进行内网穿透 一.注册ngrok 二.上传ngrok安装包到nas 三.SSH连接到nas并配置ngrok 前言: zzzz黑群晖不洗白无法进行公网访问,现在洗白貌似有比较难搞,所 ...

  3. windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

    自己用Windows Server搭建了家用NAS主机,WebDAV的文件共享方式当然也是必不可少的. 本文使用的是WIN10 专业版. 1. 安装IIS必要WebDav组件 1.1 打开控制面板,查 ...

  4. 【轻NAS】Windows搭建可道云私有云盘,并内网穿透公网访问

    文章目录 1.前言 2. Kodcloud网站搭建 2.1. Kodcloud下载和安装 2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册 4. 本地网页发布 4.1 Cpol ...

  5. 【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机

    文章目录 前言 1.Mcsmanager安装 2.创建Minecraft服务器 3.本地测试联机 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射内网端口 5.远程联机测试 6. ...

  6. 搭建内网穿透实现访问windows远程桌面

    搭建内网穿透实现访问windows远程桌面 开源的内网穿透软件有很多,如 frp和nps frp github地址:https://github.com/fatedier/frp nps github ...

  7. frp内网穿透-公网IP低成本使用高性能kali

    frp内网穿透-公网IP低成本使用高性能kali 1.frp Github项目地址:https://github.com/fatedier/frp 找到最新的releases下载,系统版本自行确认. ...

  8. 搭建ngrok服务器,实现内网穿透服务,实现外网到内网的在线访问

    一:前言 场景问题: 如果本地的项目在没有服务器的情况下,需要让他人访问: 在自己的电脑上搭建一个web服务器,实现本地的访问和外部的访问.我们就要做内网穿透了,内网穿透就是别人通过外网能够访问到我们 ...

  9. 远程办公利器——利用cpolar内网穿透在家远程公司内网电脑

       系列文章 Windows用户如何安装使用cpolar内网穿透? Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动? 远程办公利器--利用cpolar内网穿透在家远程公司内 ...

最新文章

  1. 在CentOS 6.3 64bit上安装ActiveMQ 5.15.9实录
  2. 还原时代原声,AI修复老北京再次火爆全网
  3. Mysql练习题15-给定数字的频率查询中位数
  4. storm能不能测试wadl_情感测试:4朵玫瑰花,哪个会最扎手?测你婚后能不能享住TA?...
  5. yshon对讲机如何调频率_99%的人都不知道对讲机的这些功能.....
  6. [YTU]_2906( 多重继承 日期与时间)
  7. mysql 数据库名称限制_mysql 数据库名称限制
  8. spring-kafka整合:KafkaTemplate-kafka模板类介绍
  9. python中函数包括参数函数吗_Python中的函数---函数的定义和参数
  10. sublime怎么运行go_使用SublimeGDB调试Go程序
  11. 程序员私活app排行_iOS程序员,失业就等于成为废人?
  12. I2C driver编写常用接口
  13. JS - 移动设备终端的touch事件
  14. Qt笔记8--zlib实现gzip解压
  15. JavaScript是什么?看着一篇就够了
  16. Wget 下载 ILSVRC12 数据集
  17. 倒写的乘法口诀表用c语言表示,乘法口诀表,C语言实现
  18. 7-1 六度空间(30 分)
  19. 球员岁月齐祖辉煌,执教生涯尤胜当年
  20. Python3.7出现RuntimeError: generator raised StopIteration异常

热门文章

  1. 金蝶使用mysql_金蝶财务软件中的数据库如何进入?
  2. 盘点教的好、口碑好的Web前端培训班
  3. 百万英雄类答题游戏的程序员打开方式
  4. 团购模式的持久性--看书《九败一胜》
  5. Linux Deepin蓝牙更新内核后无法使用的问题的各种方法尝试-service\heitool\hciconfig\blueman
  6. 计算机机器人游戏教学计划,机器人教学计划.docx
  7. 装备制造业解决方案,实现供应链的产供销,智能化、协同化、平台化
  8. java 新手入门电子书_Java基础入门指导(适合所有初学者).pdf
  9. Visual Studio 2022 的下载
  10. Leetcode917:仅仅反转字母(simple)