零成本搭建ddns(IP版)

本文最后更新于 2025年4月17日 中午

场景

当你在自家搭建一个个人服务器,并且哭爹求奶的弄到了一个动态公网ip,但无奈囊中羞涩没钱买域名(又或者说出于其它原因不想用自己的域名),更没钱购买昂贵的ddns服务,免费的ddns又有诸多限制不好用。但是动态公网ip又一直在变,如何能实现出门在外随时随地能访问到自家的服务器呢?

实现方法是先白嫖一个花生壳免费域名做指引,在每次访问的时候,将url的花生壳域名直接跳转到对应的公网ip上,这样又绕过了花生壳的服务,又能够精准定位到当前的公网ip上。实现了最小成本的ddns,完成曲线救国弯道超车!!

前提是必须要有公网的动态ipv4地址

详解

首先我们先按照花生壳的教程配置好ddns,确保能通过花生壳域名正常解析到我们的服务器上

然后正常通过花生壳提供的免费ddns访问的url是这样:https://huashengke.cn.vip:8080

而花生壳每个月免费流量只有几个G,并且网速也有限制,如果你长时间这样用花生壳的域名来访问,免费的套餐肯定是无法满足个人使用的

而经过跳转之后就变成了这样:https://110.242.68.66:8080

经过跳转之后,后续所有的流量就直接通过ip来进行通讯。绕过了花生壳的域名和服务,自然也就不再有流量焦虑,而网速也不再会受到花生壳的限制。又能够精准定位到服务器当前的动态公网ip上

这样我们每次访问只有第一个数据包用到花生壳的域名网络,然后第二个包就马上跳转到ip了,也就是每次访问只消耗花生壳一个数据包的流量,而一个包消耗的流量几乎可以忽略不记,甚至很多人一起用都没问题。这样就实现了最小成本的ddns

ps:家用宽带运营商一般默认禁用80和443端口,需要更改为其他端口

实现方法

一般有以下两种情况

  1. 想映射出去的服务不是php-web项目,那就在自己的服务上搭建一个php+nginx服务环境,用下面第2点的php代码新建个index.php文件,利用nginx把公网端口的流量转发到内网端口。

示例:如需要在公网通过88端口进行访问,想映射出去的内网端口是5000端口,则用nginx监听88端口,转发到内网5000端口。

nginx配置

1
2
3
4
5
6
7
8
9
10
server {
listen 88; # 监听的公网端口
listen [::]:88; # 监听的公网端口


location / {
proxy_pass http://10.0.0.8:5000; #流量转发到该内网ip端口
}

}
  1. 如果想映射出去的刚好是php-web项目,就直接编辑现有的index.php,在文件顶部添加下面的代码即可。

php代码

1
2
3
4
5
6
7
8
9
$ip = file_get_contents("http://v4.ident.me");    //访问网址http://v4.ident.me获取当前服务器的公网ip
$ipaddr = "http://".$ip.":88"; //定义跳转的url,88端口可按需更改

$current_url = "http://".$_SERVER['HTTP_HOST']; //url拼接

if ($current_url != $ipaddr) {
header("Location:$ipaddr"); //开始跳转,套个if条件防止无限跳转
}

以下是在wordpress站点的首页index文件改造示例,直接把代码加在顶部就行

alt text

弄好之后,我们每次就直接访问花生壳的域名,然后url就会马上自动跳转到对应的公网ip上,对我们操作几乎是无感知的,不会有任何影响