RouterOS上抵挡扫描的防火墙策略

背景

因为家里的宽带是找电信要了公网IP地址的,所以互联网可以直接访问到我作为出口的RouterOS,而众所周知,互联网上扫描机不知何几,被盯上了的话也是一件相当麻烦的事。

起因

之前在玩RouterOS上的防火墙的时候,发现有一个动作,叫做“add src to address list”,能够将包的源地址添加到某个列表中。俺寻思了一下,发现这能够很好的抵挡扫描机,思路是这样的:

防火墙策略

建立防火墙策略,指定一些经常被扫描的目的端口,然后,防火墙的动作是将包的源地址添加到一个叫做sniffer的地址列表中,设定有效时间为30天,然后,让防火墙直接丢弃来自这些地址的包,这样如果某个机器尝试扫描我的出口,触发了这个机制,那这个机器就会直接被ban掉30天。

命令行的话,添加起来是这样的:

/ip firewall filter add action=drop chain=input comment="drop sniffer" in-interface=China-Telecom src-address-list=sniffer
/ip firewall filter add action=add-src-to-address-list address-list=sniffer address-list-timeout=30d chain=input comment="mark sniffer" dst-port=22,23,876,3306,3389,137,139,445,5001,6379,27017 in-interface=China-Telecom log=yes log-prefix=sniffer protocol=tcp
/ip firewall filter add action=add-src-to-address-list address-list=sniffer address-list-timeout=30d chain=input comment="mark sniffer" dst-port=22,23,876,3306,3389,137,139,445,5001,6379,27017 in-interface=China-Telecom log=yes log-prefix=sniffer protocol=udp
/ip firewall filter add action=add-src-to-address-list address-list=sniffer address-list-timeout=30d chain=input comment="mark sniffer" dst-port=2323,5555,80,81,37215,8000,8080,8081,8291,8443,53 in-interface=China-Telecom log=yes log-prefix=sniffer protocol=tcp
/ip firewall filter add action=add-src-to-address-list address-list=sniffer address-list-timeout=30d chain=input comment="mark sniffer" dst-port=2323,5555,80,81,37215,8000,8080,8081,8291,8443 in-interface=China-Telecom log=yes log-prefix=sniffer protocol=udp
/ip firewall filter add action=drop chain=input comment="drop sniffer" in-interface=China-Telecom src-address-list=sniffer

然后放着一阵子,就会在address list里面看到大量的IP地址。

继续改进

如果想要更加全面的保护,可以选择在防火墙上添加允许一些正常的策略,比如说,允许每秒不超过20个echo-request的icmp包啊之类的,然后在防火墙的末尾,加一条策略,将其他未知的包,都当作扫描机处理,一律有杀错无放过。

但是有时候,ban了对方的ip,也就意味着无法访问对方的IP地址,因为回包会被防火墙丢弃。这时候就要额外的添加一条策略,插在丢弃sniffer的策略的前面:

action是accept就可以了。这样如果是主动对外访问的话,回的包要么是related,要么是established,这样就可以正常访问被ban掉的ip。至于说udp访问可能没有这个状态标记……先暂时忽略吧,出现问题再继续改进。

Windows Server作为Mikrotik设备管理员的3A服务器

在使用了Mikrotik的RouterOS作为出口路由使用了相当一段时间之后,我彻底成为了ROS的粉丝,现在手里有一个x86的小机和一直RB750Gr3分别在家里和出租屋做出口路由。

虽然设备不多,管理员也就我一个,根本没有3A什么的出场的机会,只不过嘛,生命在于折腾,研究研究不是也很好嘛。

安装NAPS服务器并配置

首先,安装网络访问策略服务器(NAPS),这可以用来作为Radius服务器。通过服务器管理器添加角色与功能,一路下一步,在角色一页勾选上“网络策略与访问服务”,然后继续下一步直至安装完毕为止。我因为懒得卸掉重装,后面的就没继续截图了。

安装完NPS之后,就可以开始配置。当然,首先,是添加用户组,并将用户添加到组,顺便确认一下用户的拨入属性由NAPS控制。

然后,去网络策略服务器,添加radius客户端。允许ROS使用NPS作为radius服务器。IP地址写ROS使用的源地址,机密随意只要和ROS设备上一样即可。

下一步是新建网络策略,填写策略名称之后,服务类型选择未指定。

然后下一步里面,指定匹配那个Mikrotik管理员组;这时候可以限定NAS标识符或者限定被叫站ID(前者默认是ROS的system identity,后者默认是radius客户端的IP地址)。

选择匹配策略的授权访问。至于身份验证方法,暂时知道ROS使用的mschapv2,以后会不会改就不知道了。至于约束,默认下一步。

到了配置设置的一步,把默认的两个标准删掉,手动添加Service-Type,值为Login,虽然默认的似乎也能用。

然后就是精华所在:在“供应商特定”一项里面,手动添加一个属性,属性是Vendor-Specific,添加。添加一个属性,供应商为“14988”,符合RFC规格,然后配置属性。供应商分配的属性号为3,属性格式为字符串,属性值就是用户组的名字。系统默认最高权限的组的名字是full,我这里填的就是full。

然后禁用BAP(因为感觉没什么乱用,似乎不禁用也行),下一步,完成。Windows Server这边就OK了。

配置ROS

首先,选好ROS的系统名称,保证能够匹配到NAPS上的那个过滤策略。

然后,在ROS上配置Radius客户端。Service选择login就行,address填NAPS的地址,Secret就是刚才在NAPS添加Radius客户端的机密,同时,建议指定一下源地址,特别是ROS有多个接口IP地址的时候。

下一步,在system-users中启用AAA登录,Default Group选择最低权限的一个,那就行了。

最后验证一下,大功告成!

使用ipv6连接Proxmox VE

最近家里上了电信的ipv6,计划直接用ipv6直连,管理起来就方便多了。但是发现死活连不上,ssh登上去一看,发现pveproxy只监听了ipv4,并没有监听ipv6。

经过一番Google,官方论坛上也有人有同样的问题,解决的办法就是在hosts文件中添加ipv6的部分。

在添加hosts中ipv6的部分之后,重启pverproxy服务就可以了

根据audit.log来放通SELinux的拦截

参考:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-allowing_access_audit2allow

Redhat系的linux发行版,默认都打开了SELinux,总所周知,SELinux可以很好的提高系统安全性,但同时也会对系统的配置造成影响,所以,很多教程开始都会包含关闭SELinux的内容,避免出现异常。

Redhat对于配置SELinux也提供了一些很有用的帮助,比如说/var/log/audit/audit.log里面就包含了SELinux的审计日志,只要一搜denied就能看到SELinux拦截了的内容,配合audit2allow工具,就可以很方便的新增SELinux的放通策略。

下面是摘抄于参考文档中的内容:

第一步,先检查/var/log/audit/audit.log,里面包含了被SELinux拦截的内容,比如说这样内容

type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir

type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)

例子中一个叫做certwatch(comm="certwatch")的进程被拦截了,被禁止写操作({ write }),写的目标文件夹的带有的var_t标签(tcontext=system_u:object_r:var_t:s0)。如果仔细阅读另外一节之后发现,这个拦截不能用简单的sebool来解决,就需要使用audit2allow来根据audit的日志来生成允许策略。

第二步,用audit2allow -w -a生成一个方便人看懂的报告。audit2allow可以读取/var/audit/audit.log,需要root权限运行,-w参数代表方便阅读,-a参数表示读取所有的audit日志。结果会是类似这样的

~]# audit2allow -w -a
type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
 Was caused by:
 Missing type enforcement (TE) allow rule.

 You can use audit2allow to generate a loadable module to allow this access.

第三步,执行audit2allow -a检查需要放通的权限

~]# audit2allow -a


#============= certwatch_t ==============
allow certwatch_t var_t:dir write;

原文中提到一个重要的提醒,提到,出现这种情况都算软件没配好,是应该向Redhat提交故障报告的。

第四步,用 audit2allow -a -M 生成一个可以加载的模块

~]# audit2allow -a -M mycertwatch

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i mycertwatch.pp

~]# ls
mycertwatch.pp  mycertwatch.te

生成模块后,用semodule加载上。原文中提到,生成的模块往往会超出实际所需的权限,建议先提交结果去  fedora-selinux-list 之类的让大家先看看有没有问题。

最后,如果出现多个denied的原因,建议用grep过滤出几个结果,分开几个模块来允许。

使用PXE从NFS服务器启动Debian Linux

一、开篇

首先,我使用的是debian的linux,版本是stretch,其他发行版的话只能作为参考,无法照搬。

然后上参考:https://blog.csdn.net/politefish/article/details/4444417

在网上搜无盘系统,全部都是指导怎么启动安装器的,这个我之前已经做过了,没什么问题,但是如何做一个能直接运行的linux,倒还是第一次。上边这边文章里面洋洋撒撒一大串,不过还是指引了我找到了比较核心的内容。

二、组件部署

首先PXE启动系统我这边就不说了,参考有很多,比如说这个这个,还有这个。总所周之,PXE启动linux需要3个组件,一个DHCP服务器,一个tftp服务器,还有一个NFS服务器。因为我家的路由器系统都比较的有好,DHCP服务器方面都支持设置PXE的引导,所以不需要额外的架设一个DHCP服务器。

tftp服务器和NFS服务器我是使用我家的一台QNAP的NAS来做的,性能和整合度不错,由于是同一份文件的不同共享,所以就不需要每次更新了kernel之后还需要单独将kernel拷贝到tftp服务器去了。

 

首先是tftp服务器,先把tftp服务器开起来,指向目标,限制好来源

然后参考这个,把所需的文件放到目标

看起来像是这样:

PXE
├── debian
│ └── #这里放Debian的系统
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vesamenu.c32

再然后就是NFS系统,在系统中调整NFS分享,让/PXE能够以NFS的形式挂载,这就可以了,如何建立NFS服务器并且建立共享,这里不多说。

三、系统安装

然后先安装好基本系统,再回来修改default的配置文件

参考了网上搜出来的文章,我发现他用的方法就是使用debootstrap来安装系统。嗯?看着眼熟,不就是我当年做过的事情吗?哎呀,这就容易了嘛。

这里我选择的方法是用containerstation跑个LXC容器,将文件夹挂载到容器中。如果手边只有windows的机器,可以选择上虚拟机,然后挂载NFS共享。

假设将目标挂载到/mnt,就可以使用这样的方式来安装基本的debian系统

 

debootstrap –arch=amd64 stretch /mnt/ http://ftp.cn.debian.org/debian/

然后稍作等待,你就获得了一个debian系统了。当然,推荐使用同一个架构的CPU,因为这样接下来的后续安装就会方便很多。

chroot到新系统之后就可以向刚安装的系统一样去做后期的调整了。注意至少有一下这么几个

1.修改root的密码

2.新增用户

以下几个我是当时做了的配置但看起来并不是必须的,酌情参考

3.修改fstab和mtab,详细看参考链接,但是我登录系统之后看mount表完全不是那么一回事

4.配置网络,参考链接里面还是用的eth0,但是我登录系统后看到的接口都不是eth0而是en0了,又是一个过期的文档

5.调整时区,这个最好做一下,还有用timedatectl set-local-rtc 1 设置将RTC时钟设为本地时间而不是UTC时间,避免和windows来回切的时候导致windows时间混乱

然后把你想安装的东西都安装上。duang,系统就安装好了。

四、调整PXE启动配置

最后回来调整一下PXE的启动文件,这里是最精华的地方:

DEFAULT vesamenu.c32
PROMPT 0
MENU TITLE Home PXE-Boot Server
label Diskless Debian
MENU LABEL Diskless Debian
KERNEL debian/vmlinuz
append vga=normal initrd=debian/initrd.img ramdisk_size=14332 root=/dev/nfs nfsroot=NFS服务器地址:/PXE/debian rw --
TEXT HELP
Starts the Diskless Debian
ENDTEXT

需要注意的是,这里是系统的根目录下存在两个指向boot的链接,所以kernel和initrd才是这个位置,至于其他的参数,我暂时还没了解到如何使用,先保留着,看以后是否再需要优化。

配置完成后,就可以启动主机,然后选择从LAN启动了,启动之后,可以看到根目录是从nfs服务器挂载的。

 

在运行ArchlinuxARM的PogoPlug上打开CPU的AES硬件加速

参考:

https://archlinuxarm.org/forum/viewtopic.php?f=30&t=2452

https://archlinuxarm.org/forum/viewtopic.php?f=7&t=2451#p13657

 

最近把在吃灰的PogoPlug又重新捞出来丢到出租屋那边,刚才在网上瞎逛的时候突然发现Archlinux的论坛上有个家伙po了个帖子,说在研究能不能打开他手里的pogoplug的AES硬件加速,然后发现可行并且有点效果,于是我也尝试着试了一下,发现确实ok,于是先记一下。

由于好心人(pklaus)的付出,现在不需要重复 firefoxPL先生的老路了,现在只需要安装特定的软件包,并且创建文件让系统能够在启动的时候自动加载kernel mod就可以用了。

根据原po的说明以及大胆的猜测,初步推测不仅仅是pogoplug,其他使用kiriwoodCPU的设备都可以用相同的方法来开启硬件加速。

先安装所需的kernel header:

pacman -S linux-kirkwood-headers

然后安装cryptodev-dkms以及其所需的软件包:

pacman -S cryptodev-dkms

然后就会根据安装脚本自动编译kernel mod,由于是需要编译的,可能会出现其他的软件包需求。

安装完毕之后,就把openssl给替换掉:

pacman -S openssl-cryptodev

由于openssl-cryptodev会自动引用一个openssl,其版本不一定会是最新,所以要是提示有openssl可以更新的时候请不要在意,保持openssl-cryptodev是最新的即可。当然openssl和openssl-cryptodev会有冲突,安装的时候会有提醒的。

顺便贴一下我测试的开了硬件加速和没开硬件加速的区别:

这个是没开

[root@alarm ~]# openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 1360545 aes-128-cbc's in 2.78s
Doing aes-128-cbc for 3s on 64 size blocks: 489186 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 256 size blocks: 133567 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 1024 size blocks: 32897 aes-128-cbc's in 2.88s
Doing aes-128-cbc for 3s on 8192 size blocks: 4273 aes-128-cbc's in 2.98s
Doing aes-128-cbc for 3s on 16384 size blocks: 2143 aes-128-cbc's in 2.99s
OpenSSL 1.1.0h 27 Mar 2018
built on: reproducible build, date unspecified
options:bn(64,32) rc4(char) des(long) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DHAVE_CRYPTODEV -DHASH_MAX_LEN=64 -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib/engines-1.1\"" -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -march=armv5te -O2 -pipe -fstack-protector-strong -fno-plt -Wl,-O1,--sort-common,--as-needed,-z,relro
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 7830.47k 10470.87k 11435.84k 11696.71k 11746.45k 11742.78k

这个是开了

[root@alarm ~]# openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 36940 aes-128-cbc's in 0.11s
Doing aes-128-cbc for 3s on 64 size blocks: 37466 aes-128-cbc's in 0.07s
Doing aes-128-cbc for 3s on 256 size blocks: 33812 aes-128-cbc's in 0.07s
Doing aes-128-cbc for 3s on 1024 size blocks: 20341 aes-128-cbc's in 0.08s
Doing aes-128-cbc for 3s on 8192 size blocks: 5133 aes-128-cbc's in 0.01s
Doing aes-128-cbc for 3s on 16384 size blocks: 2984 aes-128-cbc's in 0.02s
OpenSSL 1.1.0h 27 Mar 2018
built on: reproducible build, date unspecified
options:bn(64,32) rc4(char) des(long) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DHAVE_CRYPTODEV -DHASH_MAX_LEN=64 -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib/engines-1.1\"" -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -march=armv5te -O2 -pipe -fstack-protector-strong -fno-plt -Wl,-O1,--sort-common,--as-needed,-z,relro
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 5373.09k 34254.63k 123655.31k 260364.80k 4204953.60k 2444492.80k

这效率差距不是一星半点。不过根据原po的另外一个测试,在使用openssh传输文件的时候,速度和带宽的差距并不明显,只是在打开了硬件加速的时候,CPU占用会下降。

增大mysql/mariadb的最大连接数

最近在部署一个大型的zabbix监控,遭遇了mysql连接数不足的情况,在增加mysql的最大连接数的过程中,发现还是有点繁琐的,于是在这里记录下来。

参考:https://pjstrnad.com/mariadb-raise-number-of-connections/

首先,去编辑/etc/my.cnf,或者相应的mysql服务器配置文件。

在[mysqld]一节下方增加以下内容:

open_files_limit=12000
max_connections=10000

对应的两个参数可以根据实际需要修改。此时重启mysql服务器,发现设置并未生效,或者说生效了一半,只增加到了214,原因是systemd本身存在限制导致的。
接下来修改/etc/security/limits.conf,如果没有,就新建一个,插入以下内容。

mysql soft nofile 4096
mysql hard nofile 10240

然后创建systemd启动文件的配置

mkdir -p /etc/systemd/system/mariadb.service.d
vi /etc/systemd/system/mariadb.service.d/limits.conf

然后插入以下内容

[Service]
LimitNOFILE=infinity

完成后就可以重启MySQL服务器了

systemctl daemon-reload
systemctl restart mariadb

又发现一个神器—个人CalDAV/CardDAV服务器

主页在这里:http://radicale.org/

显着无聊,在LEDE的软件源里面到处找有什么有趣的服务,结果发现了一个叫做radicale的个人CalDAV/CardDAV服务器,直接装了跑起来之后总有点问题,于是稍微研究了一下,大概是由缺失了htpasswd的原因导致的,抓log也没报任何错误,但就是没法正常工作。最后还是去官网直接看部署过程才终于搞起来。

软件使用python编写,最新的版本使用python3,目前就我所知,软件包的需求最少也有python3、pip、htpasswd,及其所有所需软件包。功能上非常简陋,但核心的功能一个不漏,源码包不到100K,还自带一个简陋的web控制页面,可以用来新增文件夹。

安装过程就和官网所说,非常简单,最少只需要2条命令就能跑起来,不过想要用得好一点就还是需要进行一些配置。

先安装radicale

python3 -m pip install --upgrade radicale

然后pip就会搞定全部的需求,官方同时推荐对密码使用bcrypt进行加密,如果使用bcrypt加密,同时使用pip安装bcrypt。同时,根据不同的发行版,把htpasswd装上,LEDE由于没有将htpasswd从apache中拆出来,所以我就把apache装上就可以用了。

好了,服务器已经安装完,进入配置环节,radicale会自动尝试从“/etc/radicale/config~/.config/radicale/config或者是尝试从系统变量中读取RADICALE_CONFIG来找到配置文件,所以直接放在/etc/radicale/config就好,当然,可以直接加参数来运行,不过我觉得没有多少人会每次都加上一堆参数来运行的吧(笑)。

创建好配置文件,就向里面填入以下内容:

[auth]
type = htpasswd
htpasswd_filename = /path/to/users
htpasswd_encryption = plain
delay = 1

[server]
hosts = 0.0.0.0:5232
max_connections = 20
max_content_length = 10000000
timeout = 10
daemon = True
pid = /var/run/radicale.pid
ssl = True
certificate = /path/to/cert
key = /path/to/key
realm = Radicale - Password Required

[storage]
filesystem_folder = /path/to/storage

[rights]
type = authenticated

根据个人需求,可以酌情修改,比如说想要规模大一点,可以对权限进行更加详细的设定,比如说哪些人能读哪些人能写,参考这里
同时可以根据需要,抓取更加详尽的log,可以参考这里
在这个例子里面,我就参考LEDE默认的那个,直接用plain存储用户名和密码,同时使用SSL对通信进行加密,证书的做法有太多,这里就不详述。
users文件可以使用htpasswd来创建,大概的格式就是用户名:密码,如果用明文的话可以直接编辑users文件来修改密码。

创建好用户名和密码之后,可以尝试使用浏览器来访问https://your.domain:5232/,会自动跳转到一个非常简陋的web控制页面能够创建、编辑、删除包括地址簿、日历、todo清单等文件夹,根据我的测试来说暂时是没法在客户端创建这些文件夹的,所以现在web控制页面建好,然后就可以到客户端添加详细的条目了。

在使用动态ip的情况下使用tunnelbroker

最近我家不知为啥,pppoe拨号基本上每天晚上都会断一次,而重连之后由于ip地址变更,6to4的tunnel就中断了,一次两次就算了,每天都一次的话就不能靠手动,等靠自动化来维护。

参考:

https://wiki.mikrotik.com/wiki/Manual:Scripting-examples

https://gist.github.com/pklaus/960672

最开始是打算看看RouterOS能不能在接口启动之后触发运行一次脚本,但是ppp的profile里面的那个up down的scripts触发并没有效果(或许是我用法不对?)于是只能换一种思路,定时检查ip有没有变更,如果变更了,就触发一次配置更新。

两个脚本大概是这样:

脚本check_ip_change:检查ip有没有出现变更:

:global currentIP;
:local newIP [/ip address get [find interface="wan"] address];
:if ($newIP != $currentIP) do={
 /system script run update_sit;
 :set currentIP $newIP;
}

脚本update_sit:执行更新interface属性以及向tunnelbroker通知客户端节点地址变更:

local ipaddr
local users "someuser"
local key "somekey"
local tunnelid "sometunnelid"
:set ipaddr [/ip address get [/ip address find interface=wan] address]
:set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)]
/interface 6to4 set sit1 local-address=$ipaddr
/tool fetch url="https://$users:$key@ipv4.tunnelbroker.net/nic/update?hostname=$tunnelid&myip=$ipaddr" mode=https keep-result=no

然后定制每分钟执行一次check_ip_change,然后在下次ip地址变更之后,就可以在1分钟内完成自动修复了。

在RouterOS上使用Tunnelbroker的ipv6服务

参考:https://my.oschina.net/CandyMi/blog/500882

首先,你需要一个公网的ipv4地址,至少是能ping通的,那种能ping得到但是在防火墙后面的情况,我也没试过,这里就不多说。

以下是步骤:

1:前往https://www.tunnelbroker.net/注册一个账号,操作过程不详述;

2:登陆成功后在左侧选择新增一个tunnel

在ipv4的节点上填写你的ipv4地址,截图我是直接扒原博文的,看来他是已经搭好了tunnel再去访问的

根据你的链接速度来选择对应的服务器,选好后create tunnel就可以完成创建了。

3:完成tunnel的创建,接下来就是配置,在example configurations页可以选择大部分系统的配置命令,选择mikrotik的,可以直接给出配置的命令,方便的很。

到此,RouterOS已经能得到一个/64的地址块,可以用这个地址块来分ipv6给内网的设备了。

4:现在你手里已经有了一个/64的地址块,需要注意的是分配给你的地址块和tunnel的客户端地址不属于同一个/64地址块,tunnel的信息页面上有加粗标识,不要搞混了,Routed IPv6 Prefixes才是给子网用的。

在/ipv6/pool新增一个地址池,名字随便起一个,比如说sit,然后把你得到的这个/64地址块拷进去,保存。

5:然后就可以新增一个ipv6的dhcp服务器,pool选择sit,选好应用的接口,至此,RouterOS就可以承担dhcp服务器的作用了,给客户端分配公网的ipv6地址。

6:最后,在/ipv6/route中添加ipv6的默认路由,然后RouterOS以及下面的整个子网都可以访问ipv6网络了。