自己搭建一个内网穿透服务,用域名访问自己家服务器的网站

搭建前准备:
1、一个域名,本文的示例的域名是阿里云的;

2、家里有一台电脑,电脑上跑了nginx,代理了80端口;

3、家里的路由器支持虚拟服务器(可以自行百度自己的路由器有没有“虚拟服务器”)

4、域名服务商支持动态dns云解析,我这里的示例是用阿里云的动态域名解析的api;

 

步骤:

1、进入自己家的路由器(一般是在浏览器网址栏输入"192.168.0.1"然后回车即可),找到“虚拟服务器”,添加自己的局域网电脑主机的内网ip作为虚拟服务器的内部服务器ip,然后你电脑主机网站代理的端口(比如80端口),填入映射端口,我这里是外网端口和内网端口都是填的80;

2、登录阿里云,进入控制台,找到“AccessKey管理”(一般是鼠标移到页面右上角你的头像上,会弹出下拉框可找到),然后,进入AccessKey管理,没有AccessKey的,就新建一个。

3、复制AccessKey和Secret;

4、找到自己域名的RecordId,可以进入域名列表自己找;

5、在自己的局域网电脑主机服务器上安装好python,最好python3.8;

6、永久运行以下代码:(自己灵活更改代码中你自己的特殊情况的变量)

from urllib.request import urlopen
from json import load
import time
import requests
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import (
    UpdateDomainRecordRequest,
)

# 下面是你自己复制的AccessKey和Sceret
access_key = "Your AccessKey ID"
secret = "Your Secret Value"


def change_ali_ip(new_ip):
    # 将新的外网ip放入dns解析
    print("change ip~~~~")
    client = AcsClient(access_key, secret, "cn-shenzhen")
    request = UpdateDomainRecordRequest()
    request.set_accept_format("json")

    # 修改解析值
    request.set_Type("A")
    request.set_Value(new_ip)
    request.set_RR("@")
    request.set_RecordId("Your RecordId")  # 这个id对应的域名是你想要自动云解析的域名

    response = client.do_action_with_exception(request)
    print(str(response, encoding="utf-8"))


outside_ip = ""
now_outside_ip = ""
while True:
    try:
        now_outside_ip = load(urlopen("http://jsonip.com", timeout=10))["ip"]    
        if !now_outside_ip:
            now_outside_ip = load(urlopen("http://httpbin.org/ip", timeout=10))["origin"]
        if !now_outside_ip:
            now_outside_ip = load(urlopen("https://api.ipify.org/?format=json", timeout=10))["ip"]

    except Exception as e:
        pass
        # print(now_outside_ip)
        # print("time out:", e)

    if now_outside_ip and outside_ip != now_outside_ip:
        change_ali_ip(now_outside_ip)

    time.sleep(5)  # 每5秒钟检测一次

 

你可能感兴趣的:(局域网,内网穿透,自己搭建服务器)