我先前在 倍控C236软路由 文章的最后一次更新时为卵路由使用自己画的OCP转接卡增加的25G网卡不太完美,所以便有了这文;一怒之下 我一上头 连着交换机直接全套换了😊😊😊
只能说官方机器用着就是省心啊。。。
剁手购买
原本在闲鱼上找二手机器,结果无意间找到了分销商 问了下价格上确实有点优惠 本着买新不买旧的原则直接冲全新!(其实是刚发年终奖 有点上头了),至于CRS326则是看到淘宝上别家店铺的价格更优惠,有便宜不占王八蛋啊。。。
CCR2004-1G-12S+2XS
这款路由我在刚入大学的时候就关注了,那时根本没想到如今自己可以用上那么离谱的机器,更没想到在几年后它可以涨价500多(官方涨价+通货膨胀),但是问题不大小小路由全款轻松拿下~~
我一开始选择这台路由无非是看中它那荒谬的12个万兆接口,我想着着即便是不支持三层硬件卸载 二层总该支持的吧,那我直接加钱买这CCR2004-1G-12S+2XS岂不是立省一台万兆交换机???后来才发现我这想法是错误的,被mikrotik安排的明明白白,这机器连二层卸载都是不支持的……..所看到的所有接口间的传输全都靠CPU暴力转发,routeros软路由当真是名符其实,硬路由怎么整的跟软的一样,真是绝了。
至于更常见的CCR2004-16G-2S+ 一看就很坑爹啊,16个千兆口还跨了两个交换芯片,两个万兆又是直连CPU的,那如果我一个万兆作为wan,另一个万兆下接交换机再和机器上其余的千兆组bridge作为LAN,在这种情况下LAN网络内的千兆口跨了交换芯片就得靠CPU Nat,从下联万兆口到千兆口又得靠CPU Nat,然后我再仔细一顿查找资料,发现mikrotik更是给你精挑细选了个不支持三层硬件卸载的千兆交换芯片,只能二层卸载,哇~这也太几把坑了吧。。。为了卖自家交换机太拼啦,最后我也确实上套了。
考虑到带交换芯片的CCR2004-16G-2S+ 也无法做到优雅的三层硬件卸载,也基本都是靠CPU大力跑的,那我不如干脆不要交换芯片直接冲看着就牛逼的 一堆万兆口的CCR2004-1G-12S+2XS,至于更常见CCR2004-16G-2S+是纯风冷散热方案,到手可能还得自己换猫扇 算上风扇成本全光版本貌似也没贵多少;桌面型的CCR2004-16G-2S+PC又跟全光版CCR2004-1G-12S+2XS一样拥有被动散热片,但它又是外置电源又很几把坑了 就直接不考虑了。(其余两个版本都是内置的冗余电源)
其实考虑到最后,桌面型的CCR2004-16G-2S+PC才是更适合大众的版本,纯被动散热完全静音,DC电源更加省电,额外的16个千兆口家用也足够了,在我这使用情况下可以直接省去千兆交换机CRS326-24G-2S+RM
CRS309-1G-8S+
由于上文说到,由于CCR2004这路由对持硬件卸载支持不是很完美,所以想要跑满万兆,就只能再上万兆交换机,考虑到我这家用情况,没有那么多的万兆设备需要接入,那么紧凑的CRS309-1G-8S+便是一个非常完美的选择,运行着我心爱的routeros系统的同时还有了优雅的万兆三层硬件卸载。
跟桌面型的CCR2004-16G-2S+PC路由一样的纯被动散热,专用芯片使得在15瓦的功耗下即可实现全端口的无阻塞线性转发,只能说专用电路就是牛逼🐮 对我来说的唯一嘲点似乎是外置DC供电?
CRS326-24G-2S+RM
考虑到路由我选择了全光版本的CCR2004-1G-12S+2XS,然后家里的千兆设备总归还是要有一台交换机去接入的 所以就随便买了这台机器。 (明明买普版CCR2004就没这回事) 但是在后续的使用中,我发现这台机器根本不推荐购买。
使用了一段时间后发现这破机器烫的要死,就单纯的作为交换机CPU温度一直80多。。拆开一看才发现 这机器靠魔法散热。。。CPU散热片贼小
既然靠原机器那小小的CPU散热片压不住,那唯一办法就是给增加风扇了,但是主板上又没现成的4pin风扇接口,所以就只能靠外置的温控模块了,我直接从服务器里拆了个4025规格的24000转NMB牌风扇,通过温控调速模块 15% PWM的调速下 噪音还行,由于模块有电阻温度探头(粘到了散热片上)所以当温度上来后风扇转速也会被自动拉高,完美实现了温控调速。
由于Mikrotik的外置电源很是坑爹的使用了24V,所以温控模块前边再串了个宽压输入的DCDC降压模块,虽然这机器本身就支持12V-60V的宽压输入,但是考虑到原装的肯定就是最好的 所以就没打算换电源。
在我这一顿操作下来,温度很是完美的被压到了50度。。。大夏天应该是可以撑过了(大不了风扇拉一下转速,我就不信24000转暴力风扇压制不了~~~
最后总结一下 CRS326-24G-2S+RM 完全不值得购买
系统配置
两台交换机没啥可说的,就所有接口加到一个bridge里,关闭STP并开启vlan filtering,就能进行vlan的划分了,创建一下bonding 再改一下MTU到9000就完事了;至于Stock Ring之类的 玩了下 但因为会失去卸载能力就一点卵用都没了。
调试起来最难的还是路由的配置。我前后使用RouterOS大概有2年的时间,之前是跑在虚拟机里的,好在RouterOS可以导出配置,我改了下接口名称后 就直接恢复进去了,接下来只要对新家的网络做一些单独的改动就行了,详细的配置也说不完 太多了,挑几个我能分享出来的内容来说。
接口
我SFP1上插了2.5G光转电 连接G7615作为pppoe-out1的拨号接口,剩下的所有接口(除管理电口外)都加到了一个bridge1作为LAN网络,SFP2下联了CRS309扩展万兆接口,SFP3 untagged10后下联到CRS326的SFP2口作为SER网络,SFP12使用千兆光转电 连接M710q黑苹果 作为Surge旁路网关。
用不完 接口根本用不完
Vlan
我总共使用到了10 15 20 25这个4个vlan;10是作为SER管理网络,15是无线网络,20是物联网IOT网络,25是无线的访客网络。
LAN网络 | 10.0.0.1/24 |
SER管理网络 | 10.10.10.1/25 |
无线网络 | 沿用LAN的10.0.0.1/24 |
IOT物联网网络 | 10.0.10.1/24 |
Guest访客网络 | 100.0.0.1/24 |
DDNS
虽然官方的机器现在自带了DDNS功能 只需要在ip -> cloud里启用即可获得以sn.mynetname.net结尾的域名,然后我再用自己的域名的cname一下就可以,但我之前是用的脚本直接更新到cloudflare,在这机器上我也打算沿用这种操作。
#########################################################################
# ================================================== #
# $ Mikrotik RouterOS update script for CloudFlare $ #
# ================================================== #
# Credits for Samuel Tegenfeldt, CC BY-SA 3.0 #
# Modified by kiler129 #
# Modified by viritt #
# Modified by hscpro #
#########################################################################
################# 程序配置信息 #################
#调试信息 true/false
:local CFDebug "false"
#IPV4使用的接口
:global WANInterface4 "pppoe-out1"
#IPV6使用的接口
:global WANInterface6 "pppoe-out1"
#IPV6后缀("::"解析到RouterOS PD地址,目前解析至ROS ipv6地址)
:local LANipv6end ":2e2:69ff:fe11:62e0"
#TTL
:local CFttl "120"
#主域名
:local CFzone "pasi.cat"
#IPv4子域名
:local CFdomain "sh1v4.pasi.cat"
:local CFdomainid "xxxxxxxxxxxxxxxx5f8xxxxx71"
#IPv6子域名 true/false
:local switchv6 "true"
:local CFdomain6 "sh1v6.pasi.cat"
:local CFdomainid6 "xxxxxxxxxxxxxxxxxfxxxxxxx2f0"
#CloudFlare账号与APIKEY
:local CFemail "[email protected]"
#账户CFtkn和Global API Key
:local CFtkn "xxxxxxxxxxxxxxxx98fxxxxxxxxxxxxxxxx7aa"
:local CFzoneid "c0bbb33xxxxxxxxxxxxxxxxfb3exxxxe"
################# 内部变量 #################
#ipv4
:local currentIP ""
:local resolvedIP ""
:global WANip ""
#ipv6
:local currentIP6 ""
:local resolvedIP6 ""
:global WANip6 ""
################# 解析和设置IP变量 #################
#获取公网IPv4
:set currentIP [/ip address get [/ip address find interface=$WANInterface4 ] address];
:set WANip [:pick $currentIP 0 [:find $currentIP "/"]];
#获取公网IPv4
:set resolvedIP [:resolve $CFdomain];
#获取公网IPv6(DHCP方式)以及域名IPv6
:if ([/ipv6 dhcp-client get [find interface=$WANInterface6] status] = "bound") do={
:if ([/ipv6 dhcp-client get [find interface=$WANInterface6 status=bound] prefix] != "true") do={
:set currentIP6 [/ipv6 dhcp-client get [find interface=$WANInterface6 status=bound] prefix];
#IPv6地址=公网IPv6前缀+设定的后缀
:set WANip6 ([:pick $currentIP6 0 [:find $currentIP6 "::/"]] . $LANipv6end);
:set resolvedIP6 [:resolve $CFdomain6];
};
} else={
:log info ("CF: 本机没有启用IPv6或配置不正确")
:set switchv6 "false"
}
################# 生成 CloudFlare API 链接 (v4) #################
#IPv4
:local CFurl4 "https://api.cloudflare.com/client/v4/zones/"
:set CFurl4 ($CFurl4 . "$CFzoneid/dns_records/$CFdomainid");
#IPv6
:local CFurl6 "https://api.cloudflare.com/client/v4/zones/"
:if ($switchv6 = "true") do={
:set CFurl6 ($CFurl6 . "$CFzoneid/dns_records/$CFdomainid6");
};
################# 将调试信息写入日志 #################
:if ($CFDebug = "true") do={
:log info ("CF: 调试模式打开")
:log info ("CF: 解析域名 $CFdomain")
:log info ("CF: 域名解析IPv4 $resolvedIP")
:log info ("CF: 当前公网IPv4 $WANip")
:log info ("CF: 使用的API地址v4 $CFurl4&content=$WANip")
:if ($switchv6 = "true") do={
:log info ("CF: 域名解析IPv6 $resolvedIP6")
:log info ("CF: 当前公网IPv6 $WANip6")
:log info ("CF: 使用的API地址v6 $CFurl6&content=$WANip")
};
:put "Get CFdomainid: curl -X GET \"https://api.cloudflare.com/client/v4/zones/$CFzoneid/dns_records\" -H \"X-Auth-Email: $CFemail\" -H \"X-Auth-Key: $CFtkn\" -H \"Content-Type: application/json\" | python -mjson.tool"
};
################# IPv4解析地址更新 #################
:if ($resolvedIP != $WANip) do={
:log info ("CF: 正在更新 ROS IPv4 解析地址 $CFdomain = $WANip")
/tool fetch http-method=put mode=https url="$CFurl4" http-header-field="X-Auth-Email:$CFemail,X-Auth-Key:$CFtkn,content-type:application/json" as-value output=user http-data="{\"type\":\"A\",\"name\":\"$CFdomain\",\"content\":\"$WANip\",\"ttl\":$CFttl,\"proxied\":false}"
#/ip dns cache 执行间隔时大于TTS一倍可免于清理dnsdns(TTS120->5m TTS300->10m)
} else={
:log info "CF: ROS IPv4公网地址与解析的地址匹配无需更新!"
}
################# IPv6解析地址更新 #################
:if ($switchv6 = "true") do={
:if ($resolvedIP6 != $WANip6) do={
:log info ("CF: 正在更新 ROS IPv6 解析地址 $CFdomain6 = $WANip6")
/tool fetch http-method=put mode=https url="$CFurl6" http-header-field="X-Auth-Email:$CFemail,X-Auth-Key:$CFtkn,content-type:application/json" as-value output=user http-data="{\"type\":\"AAAA\",\"name\":\"$CFdomain6\",\"content\":\"$WANip6\",\"ttl\":$CFttl,\"proxied\":false}"
#/ip dns cache flush
} else={
:log info "CF: ROS IPv6公网地址与解析的地址匹配无需更新!"
}
}
这个脚本就是我目前在使用的,由Samuel Tegenfeldt 、kiler129、viritt、hscpro等大佬多次修改完成,单脚本就可以实现啊v4 v6地址的DDNS 且可以比对先前ip地址 做到有变动才更新,只需要写入pppoe拨号的配置文件pppoe-clien-profile中的Scripts即可实现在pppoe重播后自动运行脚本,比通过添加定时任务无限次去执行优雅的多。
IP colle
这是我通过github action构建的个人所需的ip分流表,目的是实现ip分流同时屏蔽一些不太安全的ip地址,有大陆白名单v4和v6路由AS4809.rsc、比特币区块链IP列表bitcoin_blockchain.rsc、常见挖矿程序IP列表coinbl_ips.rsc、常见浏览器挖矿程序列表coinbl_hosts_browser.rsc、高危IP列表maxmind_proxy_fraud.rsc、firehol level1级别危险IP表firehol_level1.rsc
大陆白名单v4和v6路由规则 ipv4段信息取自 china-ip-list ipv6段信息取自 China-IPv6-List
/file remove [find name="AS4809.rsc"]
/tool fetch url="https://cdn.jsdelivr.net/gh/Pasi-Cat/IPcolle@master/AS4809.rsc"
:if ([:len [/file find name=AS4809.rsc]] > 0) do={
/ip firewall address-list remove [find list="AS4809"]
/ipv6 firewall address-list remove [find list="AS4809"]
/import AS4809.rsc
}
bitcoin_blockchain.rsc 比特币区块链IP列表 ip段信息取自 blocklist-ipsets
/file remove [find name="bitcoin_blockchain.rsc"]
/tool fetch url="https://cdn.jsdelivr.net/gh/Pasi-Cat/IPcolle@master/bitcoin_blockchain.rsc"
:if ([:len [/file find name=bitcoin_blockchain.rsc]] > 0) do={
/ip firewall address-list remove [find list="bitcoin_blockchain"]
/import bitcoin_blockchain.rsc
}
coinbl_ips.rsc 常见挖矿程序IP列表 ip段信息取自 blocklist-ipsets
/file remove [find name="coinbl_ips.rsc"]
/tool fetch url="https://cdn.jsdelivr.net/gh/Pasi-Cat/IPcolle@master/coinbl_ips.rsc"
:if ([:len [/file find name=coinbl_ips.rsc]] > 0) do={
/ip firewall address-list remove [find list="coinbl_ips"]
/import coinbl_ips.rsc
}
coinbl_hosts_browser.rsc 常见浏览器挖矿程序列表,已解析成IP地址 ip段信息取自 blocklist-ipsets
/file remove [find name="coinbl_hosts_browser.rsc"]
/tool fetch url="https://cdn.jsdelivr.net/gh/Pasi-Cat/IPcolle@master/coinbl_hosts_browser.rsc"
:if ([:len [/file find name=coinbl_hosts_browser.rsc]] > 0) do={
/ip firewall address-list remove [find list="coinbl_hosts_browser"]
/import coinbl_hosts_browser.rsc
}
maxmind_proxy_fraud.rsc 高危IP列表 原始IP来源至 MaxMind ip段信息取自 blocklist-ipsets
/file remove [find name="maxmind_proxy_fraud.rsc"]
/tool fetch url="https://cdn.jsdelivr.net/gh/Pasi-Cat/IPcolle@master/maxmind_proxy_fraud.rsc"
:if ([:len [/file find name=maxmind_proxy_fraud.rsc]] > 0) do={
/ip firewall address-list remove [find list="maxmind_proxy_fraud"]
/import maxmind_proxy_fraud.rsc
}
firehol_level1.rsc firehol level1级别危险IP表 ip段信息取自 blocklist-ipsets
/file remove [find name="firehol_level1.rsc"]
/tool fetch url="https://cdn.jsdelivr.net/gh/Pasi-Cat/IPcolle@master/firehol_level1.rsc"
:if ([:len [/file find name=firehol_level1.rsc]] > 0) do={
/ip firewall address-list remove [find list="firehol_level1"]
/import firehol_level1.rsc
}
更详细的内容可以直接访问 https://github.com/Pasi-Cat/IPcolle 查看
钓鱼规则
/ip firewall filter
add action=add-src-to-address-list address-list="port scanners" \
address-list-timeout=4w2d chain=input comment=\
"Remote Management Port Scanner" dst-port=\
20,21,22,23,69,3389,5901-5904,512-514,873 in-interface=pppoe-out1 \
protocol=tcp
add action=add-src-to-address-list address-list="port scanners" \
address-list-timeout=4w2d chain=input comment=\
"Internet Services Port Scanner" dst-port=25,110,143,80,8000,8080,8888 \
in-interface=pppoe-out1 protocol=tcp
add action=add-src-to-address-list address-list="port scanners" \
address-list-timeout=4w2d chain=input comment="Database Port Scanner" \
dst-port=1433,1521,3306,5432,6379,27017,27018 in-interface=pppoe-out1 \
protocol=tcp
add action=drop chain=input in-interface=pppoe-out1 src-address-list=\
"port scanners"
/ip firewall filter
add action=add-src-to-address-list address-list="port scanners" \
address-list-timeout=4w2d chain=input comment=\
"Remote Management Port Scanner" dst-port=\
20,21,22,23,69,3389,5901-5904,512-514,873 in-interface=pppoe-out1 \
protocol=tcp
add action=add-src-to-address-list address-list="port scanners" \
address-list-timeout=4w2d chain=input comment=\
"Internet Services Port Scanner" dst-port=25,110,143,80,8000,8080,8888 \
in-interface=pppoe-out1 protocol=tcp
add action=add-src-to-address-list address-list="port scanners" \
address-list-timeout=4w2d chain=input comment="Database Port Scanner" \
dst-port=1433,1521,3306,5432,6379,27017,27018 in-interface=pppoe-out1 \
protocol=tcp
add action=drop chain=input in-interface=pppoe-out1 src-address-list=\
"port scanners"
实现方式是请求20,21,22,23,69,3389,5901-5904,512-514,873,25,110,143,80,8000,8080,8888,1433,1521,3306,5432,6379,27017,27018这些个端口的ip直接喜提30天的小黑屋;效果显著 一个月能送上万多个ip进去。
结尾
总的来说,我对这三台机器还是比较满意的~~~在我的使用情况中,网络里再串一台H3C的POE交换机给AP供电就完事了。