V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linuxgo
V2EX  ›  宽带症候群

routeros 里该怎么禁止某些域名访问呢

  •  
  •   linuxgo · 2023-02-15 10:08:11 +08:00 · 2938 次点击
    这是一个创建于 407 天前的主题,其中的信息可能已经有所发展或是发生改变。
    家里买的长虹电视真是把我整疯了,每次开机都提示固件升级(一旦升级就没法安装三方软件),也没有地方可以关掉升级。想在 routeros 中过滤掉升级检查,但是在网上搜了一遍,都没找到什么有效的方法
    我现在是在 firewall 里添加了一个地址列表,然后在 filter 里添加规则,但是没什么鸟用,问问大家究竟要怎么做呢?

    我的规则是
    chain=input action=drop dst-address-list=blockweb
    41 条回复    2023-03-21 10:54:48 +08:00
    chinni
        1
    chinni  
       2023-02-15 10:15:22 +08:00 via Android
    1.用 forward 表 2.用 sni 匹配比 ip 颗粒度更加细
    dsgdsfh
        2
    dsgdsfh  
       2023-02-15 10:58:39 +08:00
    我是树莓派搭建 DNS ,然后 DHCP 设置树莓派 ip ,直接 DNS 写规则屏蔽
    sylviaweissenba
        3
    sylviaweissenba  
       2023-02-15 11:01:00 +08:00
    vi /etc/hosts
    ouqihang
        4
    ouqihang  
       2023-02-15 11:01:01 +08:00 via Android   ❤️ 1
    官方提供了好几种方法,包括防火墙,代理服务器,layer7 都有。
    https://wiki.mikrotik.com/wiki/Manual:IP/Proxy
    https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/L7
    ouqihang
        5
    ouqihang  
       2023-02-15 11:01:57 +08:00 via Android
    用 input 应该不对,input 是从外网进内网。
    ych8398527
        6
    ych8398527  
       2023-02-15 11:15:45 +08:00
    ip->dns->static 把域名直接解析到 127.0.0.1
    linuxgo
        7
    linuxgo  
    OP
       2023-02-15 11:26:39 +08:00
    @dsgdsfh #2 你说的是设置客户端静态 ip ,再阻止这个 ip 地址吧,但是那样的话所有网站都不能访问了
    linuxgo
        8
    linuxgo  
    OP
       2023-02-15 11:27:37 +08:00
    @ouqihang #4 layer7 我看到说不能用来屏蔽域名,非常消耗资源而且没有效果
    linuxgo
        9
    linuxgo  
    OP
       2023-02-15 11:31:13 +08:00
    @ouqihang #5 我改成 forward 试试
    mac100
        10
    mac100  
       2023-02-15 11:43:06 +08:00
    添加一个旁路由吧。ros 管 IP 分流 OP 管域名分流 。完美
    Ruslan
        11
    Ruslan  
       2023-02-15 13:37:20 +08:00
    配置 DNS 劫持,把 53 端口劫持到你自己内网的 DNS 服务器,在自己 DNS 服务器把域名解析到 127.0.0.1
    wwbfred
        12
    wwbfred  
       2023-02-15 14:33:19 +08:00 via iPhone
    家用需求该是上 OP 吧,ROS 不是这个场景的,有些家庭基础功能到 ROS 里变成了折腾功能。OP 里 dnsmasq 直接写 0.0.0.0 就行了。
    qfdk
        13
    qfdk  
       2023-02-15 14:55:52 +08:00 via iPhone
    建议来个 aurgard home 然后 ip 设置成 3.7.2.1 想怎么玩儿就咋玩儿
    datocp
        14
    datocp  
       2023-02-15 15:09:09 +08:00
    这种对于 openwrt 就简单了
    直接 dnsmasq
    address=/qq.com/127.0.01 #这个地址还是是比 0.0.0.0 更可靠,消亡时间更快。之前是解决 office2016 升级用。

    其它的就是对电视进行分析它连哪些外部 ip 域名,然后用 nslookup 之类的取得 ip 。以目前 CDN 的存在这种方式误伤率相当高的。又是 dnsmasq 更灵活调用 ipset ,ipset=/qq.com/BdstIP
    然后
    iptables -p tcp -s 电视 ip -d 升级 ip -j -j REJECT --reject-with tcp-reset
    iptables -s 电视 ip -d 升级 ip-j REJECT --reject-with icmp-net-unreachable

    哈哈,ros 真看不上。哪有原生 linux 好用。随便搞个优酷 yk1 也能跑满 100mbps 。没有 1000mbps 带宽,不知道 erx 能带多大的带宽。
    datocp
        15
    datocp  
       2023-02-15 15:10:07 +08:00
    iptables -p tcp -s 电视 ip -d 升级 ip -j REJECT --reject-with tcp-reset
    iptables -s 电视 ip -d 升级 ip -j REJECT --reject-with icmp-net-unreachable
    mrzx
        16
    mrzx  
       2023-02-15 16:46:54 +08:00
    @chinni 请问 sni 匹配是什么类型匹配?
    3dxfood
        17
    3dxfood  
       2023-02-15 16:54:18 +08:00   ❤️ 1
    @mrzx firewall 策略里有 tls-host 字段,可以定向匹配出 https 流量的 sni 。
    3dxfood
        18
    3dxfood  
       2023-02-15 16:57:39 +08:00
    可以用 ros 做 dns server ,dns static 里写黑洞 A 记录;或者 ros 里 DNS server 写旁路 op 地址,用 op 来做。
    mrzx
        19
    mrzx  
       2023-02-15 17:13:58 +08:00
    @3dxfood 谢谢,大致理解了。

    routeros 大概通过 3 种方式来解决这个 UP 的需求。
    1.采用 DNS 劫持的方式,将不想访问的站点直接解析成错误的 IP ,让广告失效。DNS 劫持的工作可以由 routeros 的 dns 功能做,或者 openwrt 固件的路由器来做?

    2.通过 layer7 识别方式来写,感觉这个难度最高,怎么写才能屏蔽广告,如果有对应的例子就能理解了,看了一下楼上提供的官网例子,没看懂。。。

    3.通过你们说的 sni,我搜了半天才了解 sni 是什么,“在 HTTPS 中,先有 TLS 握手,然后才能开始 HTTP 对话。如果没有 SNI ,客户端将无法向服务器指示正在与之通信的主机名。” 然后利用 routeros 强大的 sni 匹配功能,将主机名匹配起来,在决定 drop 和放行.
    mrzx
        20
    mrzx  
       2023-02-15 17:38:56 +08:00
    layer7 语法搜了好久,大概理解了。
    大致是先用 wireshark 抓包,抓取数据流用的 data 部分,比如 V2EX 在数据流的十六进制就是 76 32 65 78 ,在通过在 routeros 里新建 layer7 匹配策略,在 Regex 语句匹配这些十六进制,可能正则表达式跟 iptables 之类的稍有些区别。。

    比如十六进制 76 在 routeros 下就写成\76 ^代表数据包的开头 $代表数据包的结尾 匹配 V2EX 的,layer7 语法应该写成“^\76.+ \78$”

    哪天在家里屏蔽老妈上拼多多试试。。。。
    mrzx
        21
    mrzx  
       2023-02-15 17:41:05 +08:00
    还有一点比较好奇的是,在 UP 主的 android 电视机上,用什么软件抓包? wireshark 肯定是没有的.tcpdump?那个需要 root 权限的。。。
    linuxgo
        22
    linuxgo  
    OP
       2023-02-15 17:47:52 +08:00   ❤️ 1
    @mrzx #21 tools->packet sniffer
    mrzx
        23
    mrzx  
       2023-02-15 17:50:28 +08:00
    @linuxgo 对哦,routeros 本身也支持抓包,今天帖子里的大佬们学到很多。。。
    linuxgo
        24
    linuxgo  
    OP
       2023-02-15 18:08:27 +08:00
    @3dxfood #18 我现在就是 ros 做 dns ,然后把国外的分流给 op 解析,我也看了 ros 的 dns static ,没看到如何添加 address-list ,一条条添加有点麻烦,因为总共有几十条地址要屏蔽
    linuxgo
        25
    linuxgo  
    OP
       2023-02-15 18:10:46 +08:00
    以前用 op 的 pw 的屏蔽网站功能很管用,但是 pw 的机场自动切换不好用,现在用的 openclash 又没地方加黑名单
    3dxfood
        26
    3dxfood  
       2023-02-15 19:04:30 +08:00
    @linuxgo 脚本做好,刷进 ROS 花不了一秒钟。我好奇你现在 ros 上的 DNS 分流怎么实现的?
    mrzx
        27
    mrzx  
       2023-02-15 20:46:21 +08:00
    @linuxgo 可以做好脚本,用命令行方式刷上去。
    linuxgo
        28
    linuxgo  
    OP
       2023-02-15 22:27:46 +08:00
    @3dxfood #26 你说的有道理,还是要用脚本更方便。我现在的 ip 分流是把 chinaip 做成一个 addresslist ,在 mangle 里把除了这些 ip 以外的 ip 都转发到 op 去解析和代理。
    neroxps
        29
    neroxps  
       2023-02-16 08:32:10 +08:00 via iPhone
    ros 能直接把某个域名加到 address-list 他会自动解析 ip 。然后 forward 表 block 这个 address_list 即可。设置起来比 OpenWrt 更简单。

    @datocp 虽然我也不喜欢 ros (概念落后)但网络特别是防火墙配置上我感觉他比 OpenWrt 清晰,而且人家有手机 app 。OpenWrt 的 web ui 一言难尽。
    neroxps
        30
    neroxps  
       2023-02-16 08:33:04 +08:00 via iPhone
    @mrzx ros 的 L7 正则写法简直反人类。感觉这部分代码是几十年没动过。
    neroxps
        31
    neroxps  
       2023-02-16 08:40:04 +08:00 via iPhone
    @3dxfood

    我的方案。 结合 op 做的。
    ros 上游 dns 是 op 。脚本检查 op 的 dns 服务器工作不正常(例如进程 kill 掉了)那么就切回运营商 dns 。
    自己写的脚本: https://github.com/neroxps/RouterOS-Script/blob/master/Clash_dns_check.rsc
    neroxps
        32
    neroxps  
       2023-02-16 08:42:41 +08:00 via iPhone
    @linuxgo 有一个专门针对 ros 读取 clash 规则的 dns 工具。能通过 ros api 写到 address_list 里面。基于 coredns 做的插件。但没文档,go 写要编译。
    配置得看代码写了🤣 作者就是写着玩的,文档没写。

    https://github.com/charleyzhu/coredns_wormhole_plugin
    linuxgo
        33
    linuxgo  
    OP
       2023-02-16 10:06:53 +08:00
    @neroxps #29 我的思路就是这样,但是不知为何屏蔽不了,很郁闷
    linuxgo
        34
    linuxgo  
    OP
       2023-02-16 10:29:26 +08:00
    我现在就是把要屏蔽的域名添加到 blockweb address list 里,然后在 filter 添加
    chain=forward action=reject reject-with=icmp-host-unreachable
    dst-address-list=blockweb
    但实际上完全没作用
    neroxps
        35
    neroxps  
       2023-02-16 13:35:11 +08:00
    @linuxgo #33 要确保客户机拿到的 IP 和你规则配置的 IP 一致。另外你 forward 表的规则顺序得搞对,不然前面有个 accept 下面再搞什么 reject 都没用。
    linuxgo
        36
    linuxgo  
    OP
       2023-02-16 15:43:03 +08:00
    顺便问下 ros 里 mangle,NAT 和 filter 的规则执行是什么样一个顺序?哪个先哪个后呀
    winbox
        38
    winbox  
       2023-02-21 03:29:57 +08:00
    直接给长虹域名指定一个错误的 IP 地址
    /ip/dns/static/add type=FWD match-subdomain=yes address-list=VPN forward-to=1.1.1.1 name=openwrt.org
    linuxgo
        39
    linuxgo  
    OP
       2023-03-06 08:06:20 +08:00
    @winbox 我现在是用静态 dns 把需要屏蔽的域名都指向其他 ip 地址,目前看起来是有效果了
    winbox
        40
    winbox  
       2023-03-06 19:18:04 +08:00 via iPhone
    @linuxgo dns 分流指定线路 玩法的还有很多……
    gam2046
        41
    gam2046  
       2023-03-21 10:54:48 +08:00
    ros 是否有办法将部分域名的 IPv6 给禁止掉。因为我发现国内有些厂商的域名,有 IPv6 的解析结果,但是却访问不了。导致浏览器需要挂起很久,才回落到 IPv4 访问。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1140 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:35 · PVG 02:35 · LAX 11:35 · JFK 14:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.