指定 DDNS 的域名访问 SSH 不就可以了吗?可以减少 99.99%的风险;
比如家里的动态域名为
home1.domail.com home2.domain.com 如果有多个,可以自行增加;
服务器建立文件 ipupdate 并赋予执行权限,crontab -e 定期执行这个文件,比如十分钟执行这个文件
ipupdate
#!/bin/sh
home1_ip=`ping
home1.domain.com -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'`
home2_ip=`ping
home2.domain.com -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'`
new_ip=$home1_ip,$home2_ip
port1=22
cd `dirname $0`
if [ -e './home1_ip.txt' ]; then
home1old_ip=`tail ./home1_ip.txt -n 1`
home2old_ip=`tail ./home2_ip.txt -n 1`
if [ "$home1old_ip" != "$home1_ip" ]||[\
"$home2old_ip" != "$home2_ip" ] ; then
old_ip=$home1old_ip,$home2old_ip
`/sbin/iptables -D INPUT -p tcp -m multiport --dport $port1 -s $old_ip -j ACCEPT`
`/sbin/iptables -I INPUT -p tcp -m multiport --dport $port1 -s $new_ip -j ACCEPT`
echo $home1_ip > ./home1_ip.txt
echo $home2_ip > ./home2_ip.txt
fi
else
`/sbin/iptables -I INPUT -p tcp -m multiport --dport $port1 -s $new_ip -j ACCEPT`
echo $home1_ip > ./home1_ip.txt
echo $home2_ip > ./home2_ip.txt
fi
每十分钟检查动态域名是否有变化,如有变化,更新放行端口;
为了避免服务器重启不放行端口,启动的时候把 ipupdate 同一目录下的 txt 全部删掉,运行 ipupdate 会重新建立;