分类 RouterOS 下的文章

routeros 动态公网ip建立gre隧道

由于routeros chr版最近更新加入了cloud功能,不需要再使用第三方ddns了,pppoe拨号的动态公网ip建立gre隧道更简单了。
打开cloud功能,记下routeros的域名
cloud域名

建立两个路由器之间gre隧道,local address可以不填
gre隧道

然后,给隧道两端配置IP地址
gre隧道ip

之后在/tools/netwatch新建监测
netwatch
down命令是

/interface gre set gre-xxxx remote-address=[:resolve xxxxxxx.sn.mynetname.net]

对方路由作相似设置。

如果是光猫拨号的话,routeros的cloud是不能自动更新的,需要添加一个监测,
cloud强制更新
down命令是

/ip cloud force-update

done

以routeros为宿主机基于kvm安装虚拟机

先说一个坑,routeros的x86版的是32位,chr版是64位,所以在x86版下用kvm安装虚拟机只能安装32位系统,而koolshare的lede只有64位系统,所以在x86架构的routeros下并不能用来安装koolshare的lede,但是可以安装原版openwrt,目前18.06.1版openwrt x86版img下载地址

以下以routeros v6.43.7为例,其他版本选择对应版本的组件,安装ubuntu 18.04 x86

1,安装kvm组件,下载routeros v6.43.7 extra packages,解压,把kvm-6.43.7.npk上传到根目录,重启路由器会自动安装kvm组件
2,创建routeros的img或者上传自定义img,此处img为虚拟机硬盘,ubuntu img下载地址,上传到路由器
3,创建虚拟机,选择合适的cpu,内存,并填写硬盘img的路径
4,创建虚拟机网卡
5,桥接虚拟机网卡
6,虚拟机开机

未完待续

routeros的默认nat尽量不要用masquerade

最近配置服务器安全策略遇到问题,一些内网主机ip被routeros nat了,服务端看到的都是routeros的IP地址。
仔细检查nat规则时,发现默认srcnat是所有接口masquerade,这在简单的共享上网路由器里没什么问题,因为只有一个公网出口,但是当路由器有多个出口时,比如有pptp接口,gre隧道接口等,连接两个子网的桥,由于配置了masquerade,会将两侧子网客户端ip 转换为桥接口的地址。
如192.168.1.1/24<-->10.0.0.1桥10.0.0.2<-->172.16.1.0/24中,192.168.1.100这个客户端要和172.16.1.100通信,由于所有接口的masquerade的存在,172.16.1.100看到的是10.0.0.2这个ip和自己通信,而192.168.1.100却不知道,另一192.168.1.200也要和172.16.1.100通信,172.16.1.100看到的同样是10.0.0.2。
由于nat优先级要高于路由转发,所以即使指定的静态路由没问题,ip也是被nat过的。而且nat性能消耗要高于路由转发。
解决这个问题其实很简单,就是换掉所有接口masquerade,具体到接口的srcnat或者只在公网接口上使用masquerade。所以不要偷懒,要不然迟早要还的。

routeros的日志中剔除不必要的日志

routeros的dhcp日志有一个困扰了很久的问题,安卓设备休眠唤醒时会重新向dhcp服务器申请ip,安卓设备每分钟都会唤醒,导致日志中出现大量dhcp,info内容assigned和deassigned,如下
大量assigned和deassigned日志

解决办法如下:
在/system/logging/rules下,选择info,在topics里添加!dhcp,如下图
修改日志info

其他等级的dhcp日志应该还是有的。

青云主机安装routeros,附一键安装routeros脚本

在阿里云安装过routeros,用相同脚本在青云就遇到了坑。
阿里云ecs没有cpu选项,而青云有,创建主机的时候cup高级选项,CPU 体系架构,默认值启动routeros后会cpu100%,选择haswell架构就没有问题,broadwell也不行,再往下的架构没有测试。
附一键安装routeros脚本

wget https://download.mikrotik.com/routeros/6.43.4/chr-6.43.4.img.zip -O chr.img.zip && \
gunzip -c chr.img.zip > chr.img && \
mount -o loop,offset=33554944 chr.img /mnt && \
ADDRESS0=`ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1` && \
GATEWAY0=`ip route list | grep default | cut -d' ' -f 3` && \
echo "/ip address add address=$ADDRESS0 interface=[/interface ethernet find where name=ether1]
/ip route add gateway=$GATEWAY0
" > /mnt/rw/autorun.scr && \
umount /mnt && \
echo u > /proc/sysrq-trigger && \
dd if=chr.img bs=1024 of=/dev/vda && \
reboot