掌握路由器里面变化的ip

时刻知道路由器的ip,是常见需求。

之前介绍了DDNS,DDNS可以通过一个网址指向变化的ip。然而免费的DDNS有两个缺陷:

  • 有延迟:DDNS生效有时间要求,大概为五分钟。
  • 有跑路担忧:万一DDNS 商关机了,跑路了,自己的服务就要受损。

所以来介绍另一个掌握路由器ip的方法。这个方法要求:

  • 你有一台云服务器,它具有一个ip
  • 你会基本的ssh,命令行操作 不会也没关系,下面有教程
  • 你有一个安装了OpenWrt的路由器
  • 本教程使用的SSH客户端为PuTTY,其他客户端遇到问题可留言

恐惧命令行?别怕!这有教程 ←点

Wow!命令行!很多朋友可能会吓跑!
此视频可破除恐惧👇

其实会点命令行才能破除恐惧,超简单教程👇:

ip 一变更,这个文件夹的脚本会执行

/etc/ppp/ip-up.d/ 这是OpenWrt的一个特别目录。OpenWrt会监视ip的变化,一旦pppoe拨号产生ip的改变,就会执行该目录下的脚本,无需其他配置。

PPPoE与公网ip解释 ←点

大部分家庭宽带提供了家庭网关,也就是无需路由器了(别高兴太早),然而部分网关无法设置端口转发,更不用提直接访问

可以联系客服改用PPPoE拨号,然后网关下接一个路由。

当然,即便用了PPPoE拨号,也可能会分配内网ip。可以进路由器查看,如果是100开头ip,则为内网。

在使用远程桌面、远程SMB等服务时,需要公网ip。如果发现自己是内网ip,你可以致电宽带商客服修改公网ip

修改公网ip的话术我也为准备好了,亲测有效…

10000号接入中…
喂~您好~请问有什么可以帮您?

你就说:家里的监控,师傅要求换ip才能用。

是不是公网ip

你就说:对对对对,师傅就是这么说的。

不要一上来就提公网ip,要装不懂。

至于路由器,推荐使用新路由3,全千兆的矿难货便宜;512MB内存适合装各种固件、插件搞事情;USB 3.0 可以外接硬盘做NAS。我买了3台做无线漫游。

我们先建立该文件夹:

mkdir /etc/ppp/ip-up.d/ #OpenWrt 在 pppoe ip 改变 Event 发生后,会自动执行这个目录的脚本,无需其他配置

我会在下面先讲解脚本,大家可以边看边操作。最后我会提供一个一键部署脚本,给希望节省时间的朋友。

脚本代码和讲解

#声明“me”变量是为了在家庭路由器下写 Hosts 中
me=homeNas

#获取 wan 口 ip
ip=$(ifconfig | grep -A 1 "wan" |grep inet | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"|sed -n '1p') 

# 自定义 hosts 可以让路由器下设备无痛访问家里 ip。
# 先在自定义的 myhosts 中删除上次记录的 wan ip 
sed -i "/$me$/d" /etc/myhosts 
# 然后在自定义的 myhosts 中更新本次新获得 wan ip
echo $ip $me >>/etc/myhosts

# 下面这个从路由器 ssh 到云服务器
# 请把 your-server-ip/port 换成你自己的;(验证记住云服务器 ip 后,可以删除-y -y)
# OpenWrt使用的shell为Busybox,其ssh客户端为Dropbear
# 因此你可能需要转换自己的私钥格式:OpenSSH -> Dropbear,或者用内置工具生成新公私钥
# 这里假定你已经使用Dropbear格式的私钥,并且公钥已经放在了云服务器中,且用户名为root
ssh root@your-server-ip/port -y -y -i /root/.ssh/id_ras "bash -s" <<EOF
echo $ip>$me
EOF
# 上面代码有一个小小的技巧,就是给服务器传递变量值。这是我见过最好的方法,大家可以记下。

# 给脚本添加执行权限
chmod +x /etc/ppp/ip-up.d/push-route-ip-to-server

hosts 究竟是什么东西?解释 ←点

hosts文件是一个域名对应ip的字典。在解析域名的时候,系统会在查找DNS服务器之前先检查hosts文件。

如果hosts 文件中存在某个域名和ip对应关系,形如:
192.168.1.1 router
那么你在浏览器输入http://router/,等同于输入http://192.168.1.1/

可以给OpenWrt添加一个hosts,打开http://192.168.1.1/cgi-bin/luci/admin/network/dhcp,选择HOSTS 和解析文件,在额外的 HOSTS 文件输入文件名

你也能在host文件中写入 127.0.0.1 baidu.com127.0.0.1 lol.qq.com
然后你室友、老婆、老妈就没法用百度,玩lol了

代码整合

mkdir /etc/ppp/ip-up.d/ #OpenWrt 在 pppoe ip 改变 Event 发生后,会自动执行这个目录的脚本,无需其他配置

echo '#!/bin/sh
me=homeNas
ip=$(ifconfig | grep -A 1 "wan" |grep inet | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"|sed -n "1p") #获取 wan 口 ip
sed -i "/$me$/d" /etc/myhosts #  myhosts 中删除上次记录的 wan ip 
echo $ip $me >>/etc/myhosts # myhosts 中更新本次新获得 wan ip 

# 请把 your-server-ip/port 换成你自己的
ssh root@your-server-ip/port -y -y -i /root/.ssh/id_ras "bash -s" <<EOF
echo $ip>$me
EOF
'>/etc/ppp/ip-up.d/push-route-ip-to-server
chmod +x /etc/ppp/ip-up.d/push-route-ip-to-server

你可以直接复制上面的代码,然后ssh到OpenWrt 中粘贴执行。执行后,脚本就写到这个文件中了: /etc/ppp/ip-up.d/push-route-ip-to-server

脚本写好后,每次 ip 改变,OpenWrt 会自动执行 push-route-ip-to-server。无需其他配置。

亦可以手动执行:sh /etc/ppp/ip-up.d/push-route-ip-to-server

你当然也可以push到其它地方

本脚本主要实现了ip的更新、获取和推送功能。

在获取新ip后,可搭配server酱推送到微信中或者使用命令行邮件客户端给自己发邮件。

Jan 5, 2020 ip ddns 路由器 openwrt 云服务器 scripts 脚本

相关文章