前言
内网穿透一直是私有云nas的一个痒点,没有的话仅家用也不是不行,有当然更好。大家的内网穿透方法流行的有三类:
- 公网商业中继服务与动态域名解析,比如花生壳这种,比较稳定但是要花钱,且连接依赖第三方。
- 自建反向代理服务器,技术上比较麻烦,需要自己搞定公网 域名或者公网服务器,花费精力,还可能不省钱。
- IPv6直连,我个人感觉最好的办法,省钱,比较省事,且不太依赖第三方。但是要在需要的时候能够弄到当前nas的ipv6地址,本文就是提供一种获取ipv6地址的方法和思路,希望大家一起完善。
叠甲
本人水平有限,但是本文介绍的方法我正在使用,大部分时间没有问题。不对的地方希望大家能够理解,有谁有更好的方法也请不吝赐教。
方法
我的办法很直接,
-
先写一个脚本用来获取当前的 IPv6 地址并保存到指定文件,
-
然后再写一个脚本用来发送获取到的 IPv6 地址到指定的邮箱,
-
最后再创建一个计划任务,让这个脚本每天执行一次,这样即使网络重新分配了新的 IPv6 地址也能够正常的访问我的 nas。
文件列表如下:
/vol1/1000/ipv6.txt
/vol1/1000/getip.sh
/vol1/1000/smail.py
使用的计划任务工具:1Panel
1Panel 计划任务脚本如下:
bash /vol1/1000/getip.sh
python3 /vol1/1000/smail.py
或者使用如下脚本:
ip -6 a > /vol1/1000/ipv6.txt
python3 /vol1/1000/smail.py
详情
获取当前 IPv6 地址并保存到指定文件路径 /vol1/1000/ipv6.txt
的脚本如下(#请将该脚本文件保存到 /vol1/1000/getip.sh
):
#!/bin/bash
ip -6 a > /vol1/1000/ipv6.txt
发送获取到的 IPv6 地址到指定邮箱的脚本如下(这是个python3脚本,保存到 /vol1/1000/smail.python
):
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host="替换成你的邮件服务器" #设置服务器 比如163的是 smtp.163.com
mail_user="替换成你的邮箱用户名" #用户名
mail_pass="替换成你的邮箱口令" #口令,注意 现在很多邮箱第三方访问都是用的授权码不是邮箱密码
op = open("/vol1/1000/ipv6.txt")
ipv6_info = op.read()
op.close()
sender = '设置成你发送邮件的邮箱' #要和你设置的服务器一致
receivers = ['设置成你接收邮件的邮箱'] # 接收邮件,建议和发送邮箱设置一致
message = MIMEText(ipv6_info, 'plain', 'utf-8')
message['From'] = Header("self", 'utf-8')
message['To'] = Header("self_", 'utf-8')
subject = 'python get IPv6'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")
注意:上面这个脚本中有一些参数需要替换成自己的邮箱,脚本中发送邮件使用的是25端口,这个端口收发邮件不加密,这里不要用自己搭建的邮件服务器,大的邮件服务商都会屏蔽掉没有认证过的邮件服务器发送的邮件。
这时我们就有了两个脚本文件 getip.sh
和 smail.py
且执行过程中还会产生一个文本文件 ipv6.txt
,这三个文件都在同一目录中 /vol1/1000/
,要确保两个脚本文件有可执行权限,且txt文件有写入权限。
最后创建计划任务。这里有两个选择,一个是 crontab
一个是使用论坛里很多人在用的 1Panel ,推荐后者1Panel。
如何创建计划任务这里不再详细说明,详见大神的帖子:[超详细-飞牛设置定时自动关机+远程开机或定时开机]https://club.fnnas.com/forum.php?mod=viewthread&tid=25451
(出处: 飞牛私有云论坛 fnOS)
这里仅说明下计划任务的脚本内容:
bash /vol1/1000/getip.sh
python3 /vol1/1000/smail.py
上面的脚本第一行执行脚本并把结果保存到指定文件,第二行从指定文件读取内容发送邮件到指定邮箱。
也可以直接把第一个脚本的命令直接写在第一行,这样任务脚本的内容就是:
ip -6 a > /vol1/1000/ipv6.txt
python3 /vol1/1000/smail.py
参考
实测成功,这是我的设置截图
