嗨,我叫AlbertoGã³mez,我是网络开发人员,... 最初,这不是“编程问题”,我只是想和三个同事一起玩合作游戏。 - \ (âem>/em>/ - 这也不是我也不是这个主题的专家,所以我不能给出太多的解释。实际上,有一个系统可以使用为您提供服务的人直接更新子域的IP地址。 动态DNS(DDNS)是一种自动更新域名服务器(DNS)中名称服务器的方法,通常是实时的,使用其已配置的主机名,地址或其他信息的活动DDNS配置。
这是我的第一篇文章!
序幕
我运行了游戏开发人员提供的服务器,在路由器上打开了一个特定的端口,然后将公共IP发送给这些同事开始冒险。
当然,我就面临一个问题:在大多数情况下,分配给路由器的IP是动态的。这就是为什么它迟早会改变的原因,这样做我的同事将不再能够与我首先通过的凭据联系。如果第二天我们要再次播放,我必须再次检查我的IP是什么并将其发送给他们。这可能发生的想法困扰着我。
显然,我需要一个域名才能指出IP!因此,可以每次更改IP,而无需更改任何内容。然后我想起了几年前,我听说过类似的东西:DDNS。
这是什么?
足以解决我的问题。
实现这一目标的一种简单方法是一个脚本,它可以获取我的公共IP,然后将其传递给Google域服务。
我的解决方案
首先,我去了我的DNS提供商创建DDNS子域。就我而言,我的域Albertogomez.dev在Google域注册。通过这样做,我得到了一个用户名和密码来执行子域上的操作。
经过一些研究,我发现Google域API端点可以执行我需要执行的操作:
- 让
https://domains.google.com/checkip
获取当前的公共动态IP - 让
https://username:password@domains.google.com/nic/update
更新子域IP。将用户名和密码作为基本auth和get params作为hostname
和动态ip作为myip
。
使用Axios我在启动游戏服务器之前制作了一个简单的脚本。因此,每当我想和朋友一起玩时,我都可以做到这一点,而无需检查任何东西,他们总是可以使用相同的地址连接。
const axios = require('axios');
const username = 'pC6Fmu7k6zhQMvFn'; // fake!
const password = 'u6yMFaj33T56rBdw'; // fake!
const domain = 'lets-play-with.albertogomez.dev'; // this was true
function getDynamicIp() {
return new Promise(resolve => {
axios
.get('https://domains.google.com/checkip')
.then(response => resolve(response.data))
.catch(error => resolve(null));
});
}
function updateDdns(ip) {
return new Promise(resolve => {
if (ip) {
axios
.get(`https://${username}:${password}@domains.google.com/nic/update`, {
params: {
hostname: domain,
myip: ip
}
})
.then(response => resolve(`DDNS - ${response}`))
.catch(error => resolve(`NODE - ERROR ${ip}`));
} else resolve('NODE - MISSING IP');
});
}
(async () => {
const ip = await getDynamicIp();
const status = await updateDdns(ip);
console.log(status);
})();
,在这一点上,我对自己拥有的东西感到满意。还不错。
结论
最后,我的同事完成了比赛,而我浪费时间修理了没人要求的东西。同样,过度工程对我发挥了作用。
但是,嘿,也许这有一天会对我有所帮助。也许在很短的时间内,我会决定继续这样做并更好地利用它。