ð如何使用nodejs更新DDN
#javascript #node #todayilearned #ddns

How to update a DDNS with NodeJS

嗨,我叫AlbertoGã³mez,我是网络开发人员,...
这是我的第一篇文章!

序幕

最初,这不是“编程问题”,我只是想和三个同事一起玩合作游戏。
我运行了游戏开发人员提供的服务器,在路由器上打开了一个特定的端口,然后将公共IP发送给这些同事开始冒险。
当然,我就面临一个问题:在大多数情况下,分配给路由器的IP是动态的。这就是为什么它迟早会改变的原因,这样做我的同事将不再能够与我首先通过的凭据联系。如果第二天我们要再次播放,我必须再次检查我的IP是什么并将其发送给他们。这可能发生的想法困扰着我。
显然,我需要一个域名才能指出IP!因此,可以每次更改IP,而无需更改任何内容。然后我想起了几年前,我听说过类似的东西:DDNS。

这是什么?

- \ (âem>/em>/ - 这也不是我也不是这个主题的专家,所以我不能给出太多的解释。实际上,有一个系统可以使用为您提供服务的人直接更新子域的IP地址。

保留上帝的果实以进行判断:和佩奇翁?

动态DNS(DDNS)是一种自动更新域名服务器(DNS)中名称服务器的方法,通常是实时的,使用其已配置的主机名,地址或其他信息的活动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);
})();

,在这一点上,我对自己拥有的东西感到满意。还不错。

结论

最后,我的同事完成了比赛,而我浪费时间修理了没人要求的东西。同样,过度工程对我发挥了作用。

但是,嘿,也许这有一天会对我有所帮助。也许在很短的时间内,我会决定继续这样做并更好地利用它。