如何通过域名访问挂载在 windows 移动热点下的设备?

简要描述:

一个设备被连接到了一个由 PC上的 windows 移动热点功能所建立的无线网络中。然而,每次此设备断开重连后都会被分配一个新的 ip 地址,因此不便于调试。

而我记得(因为以前成功实践过),windows 会为通过此功能与其连接的设备分配一个固定的域名,可以用于 SSH 连接之类的。但那个域名我给忘了,放狗也查不到,所以想向各位请教一下。

访问端在访问域名时,会查询 HOST 文件,再查 DNS。 DNS 域名解析得到 IP。

(1)访问端可以改 HOST,使域名指向对应的固定的 IP。
(2)需要一个DNS 服务器

DHCP 会分配 DNS,由于 IP 是变化的,所以要实现让某域名一直指向某个 IP,可以将被访问端做成一个 DNS,将某个域名始终指向自己获到的 IP。

路由器,如 tp-link ,可以使用 tplink.cn 代替 IP 访问管理页。但路由器的 DHCP 分配的 DNS 服务器是自己的 LAN IP 是固定的。

要将一个动态 IP 的设备做为 DNS 服务器是不可能的。

DHCP 也不能指定动态 IP 的设备做为 DNS 服务器。

DHCP 的 IP 必须是固定的,不然还需要另一个 DHCP 给它分配 IP。

所以动态 IP 上是不可能实现 DNS。需要把一个静态 IP 的设备做为 DNS 服务器,同时这个 DNS 服务器要想办法获取到被访问端的 IP,再做 域名和IP 的映射。

1 个赞

感谢楼上大佬的回复,不过……说来惭愧,我刚刚找到答案了:[远程主机名].mshome.net

主要是把思维逆转了一下 (某知名魔法探案游戏中枪) ,从远程设备上查询了提供移动热点的 PC 的 ip 所对应的主机名,然后反过来 ping 了一下,就成了。

看你写的这个,感觉还有诸如 [远程主机名].local 应该也是可行的。

1 个赞

怎么获取这个远程主机名?

Linux上(大多)是 host [远程主机ip]

顺手试了一下,不行,ping不通。windows 的这个移动热点和谜一样奇怪,据说同网设备之间也是不通的,但我没有试过。

装一个bonjour服务就好了:Download Bonjour Print Services for Windows v2.0.2 这是苹果的技术。Mac是自带支持的,Linux也可以安装avahi-daemon激活。不过安卓机不支持……

首先,要有静态 IP.

我在树莓派上实现了:

通过 http://notes.pi 访问 http://10.0.0.2:65535

通过 http://download.pi 访问 http://10.0.0.2:10001.

树莓派上要安装 Dnsmasq, nginx.

使用 DNS 将域名映射到 IP

Dns 的 hosts 配置,我是修改 /etc/hosts

127.0.0.1   download.pi                 # aria2, /etc/nginx/sites-available/download.pi
127.0.0.1   cse.pi                      # cse google, /etc/nginx/sites-available/cse.pi
127.0.0.1   clash.pi                    # clash-dashboard, /etc/nginx/sites-available/clash.pi
127.0.0.1   notes.pi                    # jupyter notes, /etc/nginx/sites-available/notes.pi
127.0.0.1   sync.pi                     # verysyncc, /etc/nginx/sites-available/sync.pi

每行后的注释是对应的 nginx 的配置文件的位置。

修改 DNS 服务器

直接修改路由器的 DHCP 分配的 DNS,为避免出问题,主备都设置为树莓派的 IP。

域名访问 IP:port 的 Nginx 配置

我采用的是 /etc/nginx/sites-available/{filename}/etc/nginx/sites-enabled/{filename} 的方式,其中 sites-enabled 下的文件是 sites-available 下的文件的软链接。要使 sites-avaliable 下的配置生效,必须再将其 ln -s 到 sites-enabled/

直接部署网站

server {
    listen 80;
    server_name clash.pi;
    location /{
        root /home/bcaso/clash/clash-dashboard;
        index index.html index.html;
    }
}

以上配置,实现 http://clash.pi 远程访问 /home/bcaso/clash/clash-dashboard/index.html

反向代理

网站已经用其他方式部署过了,如我的 JupyterLab 的地址是 http://10.0.0.2:65535,想使用域名访问。

server {
    listen 80;
    server_name notes.pi;
    client_max_body_size 0;
    location /{
        # 反向代理的实现方式,地址栏不会变化
        proxy_pass http://10.0.0.2:65535;
    }
}

以上配置实现通过 http://notes.pi 访问 http://10.0.0.2:65535 ,同时浏览器地址栏中的地址不会变.

但是,无法新建终端,参考官方的教程,修改为以下内容后正常。

# top-level http config for websocket headers
# If Upgrade is defined, Connection = upgrade
# If Upgrade is empty, Connection = close
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name notes.pi;
    client_max_body_size 0;
    location /{

        proxy_pass http://10.0.0.2:65535;
        client_max_body_size 0;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # websocket headers
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Scheme $scheme;

        proxy_buffering off;
    }

    # Managing requests to verify letsencrypt host
    location ~ /.well-known {
        allow all;
    }

}

重定向

server {
    listen 80;
    server_name notes.pi;
    client_max_body_size 0;
    location /{
        #rewrite ^/(.*) http://www.baidu.com/$1    permanent;
        # 127.0.0.1 是固定的,不会替换为服务器的 IP,所以有问题
        # rewrite ^/(.*) http://127.0.0.1:65535/$1    permanent;
        # 所以这里只能填固定 IP
        #rewrite ^/(.*) http://10.0.0.2:65535/$1    permanent;

        # 浏览器中的地址不论怎么调后面的参数,都会变化。
        #rewrite ^/(.*) http://10.0.0.2:65535/$1    break;
        #rewrite ^/(.*) http://10.0.0.2:65535/$1    last;

    }
}

以上在使用时,都会进行跳转。浏览器地址栏会变化。

reference

https://weixiaochu.github.io/pi/树莓派搭建内网DNS服务器并实现内网域名解析.html

2 个赞