标签 RouterOS 下的文章

RouterOS6.36rc21 开始支持 raw——

*) firewall - added pre-connection tracking filter - "raw"  table, that allow to protect connection-tracking from unnecessary traffic;

料想其与 iptables 的该特性优势一致(可提升性能),
于是尝试将以前写在主表的部分规则移到了 raw 表:

/ip firewall raw
add chain=prerouting action=drop packet-size=1492-65535 log=no protocol=icmp comment="Drop oversized unfragmented packets"
add chain=prerouting action=drop in-interface=all-ppp icmp-options=8:0 log=no protocol=icmp comment="Drop pings from WAN"
add cchain=prerouting action=drop in-interface=all-ppp dst-port=53 log=no protocol=tcp comment="Drop tcp DNS queries from WAN"
add chain=prerouting action=drop in-interface=all-ppp icmp-options=8:0 log=no protocol=icmp comment="Drop udp DNS queries from WAN"
add chain=prerouting action=drop tcp-flags=fin,syn log=no protocol=tcp comment="SYN-FIN attack protection"
add chain=prerouting action=drop tcp-flags=syn,rst log=no protocol=tcp comment="SYN-RST attack protection"
add chain=prerouting action=drop tcp-flags=fin,psh,urg,!syn,!rst,!ack log=no protocol=tcp comment="X-Mas attack protection"
add chain=prerouting action=drop tcp-flags=fin,!syn,!rst,!psh,!ack,!urg log=no protocol=tcp comment="NMAP FIN attack protection"
add chain=prerouting action=drop tcp-flags=fin,syn,rst,ack,urg,!psh log=no protocol=tcp comment="NMAP Push attack protection"
add chain=prerouting action=drop tcp-flags=fin,psh,urg,!syn,!rst,!ack log=no protocol=tcp comment="NMAP FIN/PSH/URG attack protection"
add chain=prerouting action=drop tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg log=no protocol=tcp comment="NULLflags attack protection"
add chain=prerouting action=drop tcp-flags=fin,syn,rst,psh,ack,urg log=no protocol=tcp comment="ALLflags attack protection"

前言

为了提升 OSMC 的使用体验而购买了 Raspberry Pi 2 Model B
于是淘汰了一台 v1Model B 下来(下称 RPi )。
看着 <span style="direction: rtl; unicode-bidi: bidi-override;">egdeLSS</span> 的 Pro 套餐配额每月剩一大半着实心疼,
决定用 RPi 架个家庭网关给 PS4 和 AppleTV 加加速

RPi 上的配置

我的 RPi 安装 Raspbian Jeesie Lite
其它系统大同小异。

配置 <span style="direction: rtl; unicode-bidi: bidi-override;">egdeLSS</span>

先去 <span style="direction: rtl; unicode-bidi: bidi-override;">egdeLSS</span> 官网下载适配 RPi 的 Cli 转换器(下称 SE )并给予执行权限,
执行时会报错 No such file or directory
疑是依赖未解决。
尝试找出依赖:

head -1 SE | cat -A
...
/lib/ld-linux.so.3
...

看来缺少 /lib/ld-linux.so.3
尝试解决

ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3

再次执行不再报错。

配置文件示例可见官网,
细节调整可参考 <span style="direction: rtl; unicode-bidi: bidi-override;">yxorPAH</span> 的文档。
其关键的配置项如下:











- 阅读剩余部分 -

前言

ROS 中配置完 PCC 后的 PPPoE 流量

目前公司有近百台设备,
申请两条电信 100M 光纤,
之前几个月一直分成两个网络在使用,
除了偶尔某条线过于繁忙之外也没什么不便。

最近我搭了内网的研发测试环境,
势必要将设备统一到同个办公内网。
索性买了一台与家里型号相同的 RB850Gx2
准备除了合并网络之外顺便做多线负载均衡。

介绍

ROS 官网介绍了多种 LB 方案
用得较多的分 PCC (Per Connection Classifier) 和 Nth 两种;
我理解二者的区别主要在于:前者基于 IP 而后者基于连接,
因此后者从流量角度来说更为均衡,而前者稳定性更佳;
办公网当然是稳定压倒一切。

配置

官网教程通常选用固定 IP 做示例,
咱们动态 IP 用户需要稍作调整 (参考此文),
记录如下——<!--more-->

标记所有从 WAN 口进入且未经标记的流量

注意规则中的 no-mark 是系统保留字,代表未经标记的连接。
WAN_1WAN_2 是 ROS 中对两个 WAN 口的命名,若有更多 WAN 规则可类推。

/ip firewall mangle
add chain=input action=mark-connection new-connection-mark=WAN_1 passthrough=no in-interface=PPPOE-Out_1 connection-mark=no-mark comment="Mark All Incoming WAN Connections w/o Any Marks"
add chain=input action=mark-connection new-connection-mark=WAN_2 passthrough=no in-interface=PPPOE-Out_2 connection-mark=no-mark

将相同的标记打到出口流量上

/ip firewall mangle
add chain=output action=mark-routing new-routing-mark=WAN_1 passthrough=no out-interface=PPPOE-Out_1 connection-mark=WAN_1 comment="Attach the Same Routing Mark to the Outgoing Connections with the Incoming One"
add chain=output action=mark-routing new-routing-mark=WAN_2 passthrough=no out-interface=PPPOE-Out_2 connection-mark=WAN_2

PCC

Ether-Master-Local 请设置为 LAN 口的 Master Port (或是 Bridge 模式下的接口);
若有更多 WAN 规则可类推。

/ip firewall mangle
add chain=prerouting action=mark-connection new-connection-mark=WAN_1 passthrough=yes dst-address-type=!local in-interface=Ether-Master-Local connection-mark=no-mark per-connection-classifier=both-addresses:2/0 log=no log-prefix="" comment="Split the Internal Connections Equally Amongst All WANs"
add chain=prerouting action=mark-connection new-connection-mark=WAN_2 passthrough=yes dst-address-type=!local in-interface=Ether-Master-Local connection-mark=no-mark per-connection-classifier=both-addresses:2/1 log=no log-prefix=""

让不同标记的流量走不同的路由

/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=WAN_1 passthrough=no in-interface=Ether-Master-Local connection-mark=WAN_1 comment="Attach A Routing Mark to the Marked Connections"
add chain=prerouting action=mark-routing new-routing-mark=WAN_2 passthrough=no in-interface=Ether-Master-Local connection-mark=WAN_2

导向不同的出口网关

设置不同 distance 值做“灾备”。

/ip route
add dst-address=0.0.0.0/0  gateway=PPPOE-Out_1 routing-mark=WAN_1 distance=1
add dst-address=0.0.0.0/0  gateway=PPPOE-Out_1 routing-mark=WAN_2 distance=2

NAT

亦可去掉 out-interface 合成一条。

/ip firewall nat
add chain=src-nat  out-interface=PPPOE-Out_1 action=masquerade
add chain=src-nat  out-interface=PPPOE-Out_1 action=masquerade

至此配置完毕。















- 阅读剩余部分 -

前儿给家里弄了台 RB850Gx2 替换 E4200 作主路由器,
首次玩 RouterOS(下称 ROS),
在这里记录一些常用设置以备忘。
(不过近两年许多笔记已改用 Markdown 编写后丢 Google Drive 保存了,
要是能自动同步到 Blog 就太方便了)

一开始我以为 ROS 里的端口转发很简单,
根据网文增加规则之后发现只能从外网通过 DDNS 域名访问(内网不行),
于是回头根据官方教程修改 NAT 回环设置,
折腾好一会儿才据此帖找到了窍门,
提示一点:注意规则顺序

以下是示例,即:
假设内网网段是 192.168.0.0/16 ,
Master Port 是 Ehter1-local-master
将端口 1234 端口转发至内网 192.168.1.x:4321 ,
无需如一些网文所言必须增加定时任务来更新公网 IP 。

/ip firewall nat> print

Flags: X - disabled, I - invalid, D - dynamic 
 0    ;;; NAT - WAN
      chain=srcnat action=masquerade src-address=192.168.0.0/16 out-interface=PPPoE log=no

 1    ;;; NAT - Loopback
      chain=srcnat action=masquerade src-address=192.168.0.0/16 dst-address=192.168.0.0/16 out-interface=Ehter1-local-master log=no

 2    ;;; Port Forwarding
      chain=dstnat action=dst-nat to-addresses=192.168.1.x to-ports=4321 protocol=tcp dst-port=1234 log=no