分享一个自己觉得ros+openwrt最完美的方案

guitengyue1月前0

0.前言
如果仅仅是出国为目的,其实单个op完全能解决,也更为推荐只用一款,但是op用了那么久以后,还是感觉会有莫名其妙的问题,自从用到了ros以后,那真是稳如狗来形容,而且我还特别喜欢ros的组网功能,轻松实现几个家的局域网组网,方便内网播放视频等。复制代码说说我的配置:
Esxi中分配ros 4个端口,其中一个wan,3个lan(两个10g-lan口桥接)另一个lan和op是同一独立网段,可以新建一个空交换机进行分配
局域网主网的交换机192.168.0.0/23 其中vmnic2是10g光口,采用了sr-iov虚拟化,此模式下直通和虚拟都能用


创建一个没有上行网卡的switch1,分配switch-null交换机,用于192.168.2.1的内网交换,引用一段来自liwangli的回复:
假设你ros是192.168.0.1,op是192.168.0.2,一个机器是192.168.0.100,发给ros,然后被标记转到op,因为你做了snat,所以源地址变成ros的192.168.0.1,所以包回来的时候,op会发给ros,ros再恢复原来的源地址转给目标机器,这是你现在的情况,你不是说不想这样么。你这个情况,如果关了snat,那么ros转给op的时候,源地址还是100,当包从远端回来时,op这边看到目的地址是100,可能不经过ros(具体说是不经过ros的ip层处理了,直接从bridge就过去了),直接返回给目标机器100,这样就有问题了,因为目标机器会发现出去的路径和回来的路径不一致,所以网络不通,这就是你关了snat就不通的原因。如果ros单独弄出一个口不加进bridge,给这个口配个192.168.2.1的ip,给op配成192.168.2.2,就不会出现上述问题了复制代码
1.Ros:
bridge1(lan1+lan2)192.168.1.1/23(lan1是vmnet3,ros6.x的sr-iov配置驱动不认,lan2是我直通了一个x520的光口,用于和lan1桥接,多一个10g光口,不然也是浪费,cpu性能足够,软交换应该跑个5G+完全没问题)
bridge2(lan3)192.168.2.1/23
pppout(wan)
Ip设置在ip-address list


图片和上述说的不一致,调试时候截的图
2. Openwrt
lan:192.168.2.2/23
Op的网关设置为ros的bridge2 192.168.2.1
Lan的防火墙里面加入下面两句话(大概意思是经过op处理的ip全部伪装成op的lan ip)
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE
3. Ros mangle和CN-IP导入
setting-script中新增获取chia-ip的脚本,不过这个脚本有个小bug,在ip-firewall-address lists中加入192.168.0.0/16,不然远程V-P-N回来的时候打不开内网地址了。添加完后记得手动运行下。
/tool fetch url=http://www.iwik.org/ipcountry/mikrotik/CN
/import file-name=CN
:local CN [:len [/ip firewall address-list find list="CN"]]
:log info ("CN-list-update:"."$CN"."rule")
/file remove [find name="CN"]复制代码
对来源192.168.0.0/23的非国内IP标记为op (ip--firewall-mangle),后面的passthrough意思是流量会不会继续往下走进行相关标记。原来op和ros同网段的话还要放行op的ip,现在不同网段了就不需要了

4.ip--firewall-Nat
伪装out.interface改为!Bridge2

5. Dhcp设置
接口绑定bridge1,networks网关和dns指定192.168.1.1

6.Dns设置
allow remote那个打勾,servers指定op的lan ip192.168.2.2,pppoe-out1中的use peer dns要关闭

7.Route设置
Ip-route中
目标ip是192.168.2.0/23的都走bridge2的网关
Distance选1

流量标记为op的,都走op的网关(op的lan地址),优先级1

8.监视op是否正常
Tools-netwatch (host改为192.168.2.2)
Up:op的ip能ping通,设置ros的dns如下,启用mangle的规则,数字根据你实际的调整
:local dns "192.168.2.2"
/ip dns set servers=$dns
/ip firewall mangle enable number=18
/ip firewall mangle enable number=17复制代码
Down:如果不能ping通,调整ros的dns 223.5.5.5,并关闭相应的mangle的规则
:local dns "223.5.5.5"
/ip dns set servers=$dns
/ip firewall mangle disable number=18
/ip firewall mangle disable number=17复制代码
最新回复 (54)
  • 楼主guitengyue1月前
    引用2
    word复制出来的,格式咋变这样了。。。。。。
  • 你这好壮观呀,这么多虚拟机
  • xiaokin1月前
    引用4
    感觉好复杂,物理机直接op感觉最方便
  • liansishen1月前
    引用5
    格式看傻了,等修复了再研究一下
  • sevastian1月前
    引用6
    感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。
    我就说一句话也能急眼啊。那我把我的配置展示一下好了,只要一个Linux就能实现各种乱七八糟的路由功能。
    这是开机脚本,用于配置策略路由,使用ipip.net提供的china_ip_list.txt
    # set ipset
    ipset create vxn hash:ip timeout 600 #这里超时设置是为了配合dnsmasq使用的
    ipset create china hash:ip timeout 600
    ipset create cnnet hash:net
    for ip in $(/usr/bin/cat '/root/china_ip_list.txt'); do
    ipset add cnnet $ip
    done
    ipset create globaldns hash:ip#外部dns
    ipset add globaldns 1.1.1.1
    ipset add globaldns 8.8.8.8
    ipset create reserved hash:net#本地子网全部拒绝转发到透明代理
    ipset add reserved 224.0.0.0/4
    ipset add reserved 255.255.255.255/32
    ipset add reserved 10.0.0.0/8
    ipset add reserved 172.16.0.0/12
    ipset add reserved 192.168.0.0/16
    # restart iptables
    service iptables restart
    # set rules
    ip rule add fwmark 3 table 67 #出口1
    ip rule add fwmark 1 table 100#透明代理路由
    ###########
    # set rou
    # 100 tproxy
    ip rou add local 0.0.0.0/0 dev lo table 100
    # 67 cnuni
    ip rou add default via B.B.B.B dev eth2 table 67
    ip rou add 192.168.18.0/24 dev eth4 table 67 #本地多个子网的路由
    ##########
    # restart dnsmasq
    /usr/bin/systemctl restart dnsmasq
    这是iptables配置
    *nat
    :PREROUTING ACCEPT [4944807596:777225642696]
    :INPUT ACCEPT [53944758:3695910104]
    :OUTPUT ACCEPT [53859148:3341136057]
    :POSTROUTING ACCEPT [7799803:541324874]
    :VSERVER - [0:0]
    -A PREROUTING -d B.B.B.B/32 -j VSERVER
    -A POSTROUTING -o eth2 -j MASQUERADE
    COMMIT
    # Completed on Mon Sep 13 14:39:36 2021
    # Generated by iptables-save v1.4.21 on Mon Sep 13 14:39:36 2021
    *mangle
    :PREROUTING ACCEPT [6284859:4731768542]
    :INPUT ACCEPT [579387:166910290]
    :FORWARD ACCEPT [4519840:4305979582]
    :OUTPUT ACCEPT [525050:303183049]
    :POSTROUTING ACCEPT [5040218:4607020954]
    :SUB_IN - [0:0]
    :V2 - [0:0]
    #子网进入流量
    -A PREROUTING -p icmp -j RETURN
    -A PREROUTING -i eth3 -j SUB_IN
    -A PREROUTING -i eth3 -j RETURN
    -A PREROUTING -i eth4 -j SUB_IN
    -A PREROUTING -i eth4 -j RETURN
    -A PREROUTING -i tun1 -j SUB_IN
    -A PREROUTING -i tun1 -j RETURN
    #gw流量
    -A PREROUTING -m addrtype --src-type LOCAL -j SUB_IN
    #gw访问global DNS走透明代理
    -A OUTPUT -p udp -m udp --dport 53 -m set --match-set globaldns dst -j MARK --set-xmark 0x1/0xffffffff
    -A OUTPUT -p udp -m udp --dport 53 -m set --match-set globaldns dst -j RETURN
    #拒绝本地流量进入代理
    -A SUB_IN -m set --match-set reserved dst -j RETURN
    -A SUB_IN -m set --match-set vxn dst -j V2
    -A SUB_IN -m set --match-set vxn dst -j RETURN
    #国内流量打标签走路由表67
    -A SUB_IN -m set --match-set china dst -j MARK --set-xmark 0x3/0xffffffff
    -A SUB_IN -m set --match-set china dst -j RETURN
    -A SUB_IN -m set --match-set cnnet dst -j MARK --set-xmark 0x3/0xffffffff
    -A SUB_IN -m set --match-set cnnet dst -j RETURN
    #其他的走代理
    -A SUB_IN -j V2
    -A SUB_IN -j RETURN
    -A V2 -p tcp -j TPROXY --on-port 1080 --on-ip 127.0.0.1 --tproxy-mark 0x1/0xffffffff
    -A V2 -p udp -j TPROXY --on-port 1080 --on-ip 127.0.0.1 --tproxy-mark 0x1/0xffffffff
    -A V2 -j RETURN
    COMMIT
    dnsmasq就很简单了,默认用global DNS解析,国内用dnsmasq-china-list这个项目的配置文件从国内DNS解析。有一些网站想要自定义访问路径的,可以加入ipset参数指定到vxn或者china的ipset里面。
    dhcp也用dnsmasq分配,能绑定端口分发不同子网的地址,或者绑定mac分发。
    如果有些设备(子网)永远不走代理,比如PT、智能家居,可以在mangle表PREROUTING链里面直接改成-j MARK --set-xmark 0x3/0xffffffff。
    说实话,楼主都已经接触到mangle表的概念了,再往前多走一步,就知道现在这个结构有多么累赘。
  • 楼主guitengyue1月前
    引用7
    liansishen 发表于 2022-4-20 14:36
    格式看傻了,等修复了再研究一下
    不知道怎么修复。。。word导入的就这样了?
  • 楼主guitengyue1月前
    引用8
    sevastian 发表于 2022-4-20 14:44
    感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。
    那请你立即关闭网页,也不知道你点进来干嘛
  • 楼主guitengyue1月前
    引用9
    xiaokin 发表于 2022-4-20 14:27
    感觉好复杂,物理机直接op感觉最方便
    物理机和op也一样适用
  • 楼主guitengyue1月前
    引用10
    tian349776608 发表于 2022-4-20 14:19
    你这好壮观呀,这么多虚拟机
    嗯,这几个都要用到
  • liansishen1月前
    引用11
    guitengyue 发表于 2022-4-20 14:50
    不知道怎么修复。。。word导入的就这样了?
    编辑里面把相应的代码改一下,图片路径删了
  • 楼主guitengyue1月前
    引用12
    sevastian 发表于 2022-4-20 14:44
    感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。
    我就说一句话也能急眼啊。那我把我 ...
    对,我感觉ros的核心就是mangle和route,几乎可以实现所有的功能
    前几天因为碰到问题,在论坛问了,也因此受了启发,解决了一些实际问题,发帖的意义给若干天以后的自己查看,也给其他类似玩法的坛友一个启发
  • wswcx1月前
    引用13
    可惜ROS不支持NAT1,或者说是不能给一部分IP以NAT1,不然还是挺喜欢这系统的~
  • 楼主guitengyue1月前
    引用14
    wswcx 发表于 2022-4-20 15:52
    可惜ROS不支持NAT1,或者说是不能给一部分IP以NAT1,不然还是挺喜欢这系统的~ ...
    https://www.youtube.com/watch?v=XihnUAo2soA
    nat里面,就2条,好像能实现,你试试
    我因为没有nat1需求,没测试过
  • imyz1月前
    引用15
    sevastian 发表于 2022-4-20 14:44
    感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。
    我就说一句话也能急眼啊。那我把我 ...
    留个记号,慢慢学习
  • chazikai241月前
    引用16
    esxi在家里用缺点就一个,不启用ha的话,硬件出点故障就全部GG了。
  • wun_0081月前
    引用17
    ros 支持万兆吗?需要花钱吗
  • zwb06191月前
    引用18
    留个记号,慢慢学习
  • zwb06191月前
    引用19
    好像少了端口转发,这种设置法影响端口转发吗?
  • 楼主guitengyue1月前
    引用20
    wun_008 发表于 2022-4-20 17:36
    ros 支持万兆吗?需要花钱吗
    支持
    可花钱买正版
  • 楼主guitengyue1月前
    引用21
    zwb0619 发表于 2022-4-20 20:12
    好像少了端口转发,这种设置法影响端口转发吗?
    不影响
    端口转发还是按照原来设置方法
    nat中添加便可
  • shiho1月前
    引用22
    ros觉得入门门槛好难。。。。界面太不友好了。。是我太笨了,完全不会配置
  • ctz5561月前
    引用23
    楼主给个网络拓扑图呀!我居然没看明白。实现透明旁路由吗(ROS主路由,OP旁路由)?
    前一阵折腾过,结果国内网站上不去了,应该是产生回路了,OP加了伪装也还是不行就没再折腾了。dhcp option指定网关更简单。
  • 楼主guitengyue1月前
    引用24
    ctz556 发表于 2022-4-20 21:15
    楼主给个网络拓扑图呀!我居然没看明白。实现透明旁路由吗(ROS主路由,OP旁路由)?
    前一阵折腾过,结果 ...
    明天抽空补一个吧
    ros主,op旁
  • 楼主guitengyue1月前
    引用25
    shiho 发表于 2022-4-20 20:38
    ros觉得入门门槛好难。。。。界面太不友好了。。是我太笨了,完全不会配置 ...
    接触一下就会了,其实还是蛮简单的,有需求就上,没需求就还是一个op当主路由算了
  • ksjssj1月前
    引用26
    shiho 发表于 2022-4-20 20:38
    ros觉得入门门槛好难。。。。界面太不友好了。。是我太笨了,完全不会配置 ...
    界面真是太丑太简陋了,和UBNT一比更没法看。。。
  • eneiku1月前
    引用27
    最近我也在折腾ros,其中一个目的就是实现楼主说的这种ip白名单分流。目前还卡在多播之后给个别线路和客户端指定upnp或者dmz
  • zhfreal1月前
    引用28
    sevastian 发表于 2022-4-20 14:44
    感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。
    我就说一句话也能急眼啊。那我把我 ...
  • zhfreal1月前
    引用29
    整复杂了,单一系统实现更好,没必要额外引入一套系统提升复杂度降低效率。
  • wswcx1月前
    引用30
    guitengyue 发表于 2022-4-20 15:54
    https://www.youtube.com/watch?v=XihnUAo2soA
    nat里面,就2条,好像能实现,你试试
    我因为没有nat1需求 ...
    感谢大佬指点~~回头试试
  • Oxyer1月前
    引用31
    收藏为敬
  • Mufasa1月前
    引用32
    太复杂了一点。。。。
    我这里平时不开OP,也不走国外。
    按照OP相同的设置,弄了个LEDE(其实也是OP),在虚拟机里面运行。
    这样不必担心我在外面买的VPS因为流量过大出问题。
    需要用的时候,去ESXi管理界面,关闭LEDE,开启OP。
    软路由开关机很快。。。。
  • voandrew1月前
    引用33
    我一哥们用了ros,完全抛弃op了,局域网络内多网关还是会导致一些问题的。ros速度更快更稳定。
  • 引用34
    好,先支持一波。
    顺便问一句,OpWRT用的啥版本?我ESXi里虚拟OpWRT,无论如何都无法网页管理。LUCI必卡死。
  • 楼主guitengyue1月前
    引用35
    声色茶马 发表于 2022-4-21 10:59
    好,先支持一波。
    顺便问一句,OpWRT用的啥版本?我ESXi里虚拟OpWRT,无论如何都无法网页管理。LUCI必卡死 ...
    某山下过一个,但是他那个不支持万兆sr-iov,于是我自己编译了一个
    旁路啥功能都不需要,只要网卡驱动全一点,加一个passwall就好了
  • 楼主guitengyue1月前
    引用36
    voandrew 发表于 2022-4-21 10:47
    我一哥们用了ros,完全抛弃op了,局域网络内多网关还是会导致一些问题的。ros速度更快更稳定。 ...
    op就是为了用插件
    ros就是除了出国以外,其他好像都能实现
  • 楼主guitengyue1月前
    引用37
    ctz556 发表于 2022-4-20 21:15
    楼主给个网络拓扑图呀!我居然没看明白。实现透明旁路由吗(ROS主路由,OP旁路由)?
    前一阵折腾过,结果 ...
    我不知道你所谓的透明旁路是啥意思,少一层nat?那不是的,原来我同一个网段的op,就是所谓的少一层nat吧,但是op无法管理设备,而且有时候感觉有点问题,所以被我弃用了
    画的很丑,估计还没上面文字好理解
  • voandrew1月前
    引用38
    guitengyue 发表于 2022-4-21 11:05
    op就是为了用插件
    ros就是除了出国以外,其他好像都能实现
    出国也能实现,听我哥们儿说,直接用内置隧道协议就可以了
  • likeme1月前
    引用39
    Openwrt各种编译版本太多,实在不知道该选哪个。
  • ctz5561月前
    引用40
    guitengyue 发表于 2022-4-21 11:22
    我不知道你所谓的透明旁路是啥意思,少一层nat?那不是的,原来我同一个网段的op,就是所谓的少一层nat吧 ...
    透明旁路就是设备不用指定网关IP为旁路由的地址,直接由主路由ROS分流。你这么做就是为了实现这个功能吧。其实这样能真的有点复杂,当然弄好后也能稳定运行。我就是没弄好,所以就用DHCP option来指定网关。
    题外话,希望ROS的docker早日重新上线。
  • wxsk1月前
    引用41
    ROS能实现的OP都能实现,实在是画蛇添足
  • 楼主guitengyue1月前
    引用42
    ctz556 发表于 2022-4-21 20:48
    透明旁路就是设备不用指定网关IP为旁路由的地址,直接由主路由ROS分流。你这么做就是为了实现这个功能吧 ...
    对,dhcp指定网关的话还是有很多不确定的因素,相当于所有流量都走了op和ros,然后一旦op挂了,就上不去了(之前几次运行下来,op挂掉的概率还蛮高,也搞不清楚情况)
  • 楼主guitengyue1月前
    引用43
    likeme 发表于 2022-4-21 15:23
    Openwrt各种编译版本太多,实在不知道该选哪个。
    回头找找我的原来编译的文件,或者你直接去某山下一个,旁路由的版本就是了
  • Darcychiu1月前
    引用44
    你把简单的东西弄复杂了,效率低还容易出问题。给你提供个思路,既然用ROS了,分流就不要用效率很低的mangle了,直接BGP或者OSPF,几万条路由几秒钟就加载完成,宣告方可以是境外的VPS(over Wireguard),也可以是本地的代理小鸡。
    DNS当然也可以通过L7去劫持,防污染。如果想一台mikrotik搞定所有,代理可以直接上wireguard,单日过境流量过大致端口被封时,可以通过脚本监测,实时切换本地及VPS端口。
  • 楼主guitengyue1月前
    引用45
    Darcychiu 发表于 2022-4-21 22:22
    你把简单的东西弄复杂了,效率低还容易出问题。给你提供个思路,既然用ROS了,分流就不要用效率很低的mangl ...
    学习下,以后研究
    目前用的是xray以及最新的那个Hysteria
    wireguard之前没咋研究过
  • Darcychiu1月前
    引用46
    guitengyue 发表于 2022-4-21 22:28
    学习下,以后研究
    目前用的是xray以及最新的那个Hysteria
    wireguard之前没咋研究过 ...
    你可以继续使用xray,但是建议不要用openwrt了,直接虚拟一台linux,跑xray和bird(BGP、ospf等)就行了
  • 2Bpencil1月前
    引用47
    看上面的几位大侠分享讨论经验。
  • t42322331月前
    引用48
    Darcychiu 发表于 2022-4-21 22:22
    你把简单的东西弄复杂了,效率低还容易出问题。给你提供个思路,既然用ROS了,分流就不要用效率很低的mangl ...
    大佬,能分享下wireguard端口被封,实时切换两端的脚本吗?
  • caileipk1月前
    引用49
    简单的事情复杂化
  • Darcychiu1月前
    引用50
    t4232233 发表于 2022-4-22 06:45
    大佬,能分享下wireguard端口被封,实时切换两端的脚本吗?
    #!/bin/bash
    let portxx=40000+$(($RANDOM$RANDOM%20000))
    echo "newport="$portxx
    wg set wg0 listen-port $portxx && echo "Ok Successful" #vps端
    sshpass -p passwd ssh -p 22 admin@10.92.0.3 -o StrictHostKeyChecking=no "/interface/wireguard/peers;set [find comment=gcphk] endpoint-port=$portxx;/quit" #mikrotik端
    可以自行设置执行条件,例如:每分钟监测一次,mikrltik公网通且wg局域网不通时,才执行;或每天上午十点前执行(GFW十点左右封端口)。
  • liwangli1月前
    引用51
    Darcychiu 发表于 2022-4-21 22:22
    你把简单的东西弄复杂了,效率低还容易出问题。给你提供个思路,既然用ROS了,分流就不要用效率很低的mangl ...
    我用的也是ospf,确实灵活性比原来的高,旁边路挂了,网络自动走isp的路径
  • t42322331月前
    引用52
    Darcychiu 发表于 2022-4-22 13:06
    #!/bin/bash
    let portxx=40000+$(($RANDOM$RANDOM%20000))
    echo "newport="$portxx
    在次感谢
  • misinform1月前
    引用53
    Esxi的网络我一直没搞明白
  • 楼主guitengyue1月前
    引用54
    Darcychiu 发表于 2022-4-21 22:33
    你可以继续使用xray,但是建议不要用openwrt了,直接虚拟一台linux,跑xray和bird(BGP、ospf等)就行了 ...
    今天粗粗看了下ospf,估计要消化一段时间,不太会搞
  • Johnny.Lee1月前
    引用55
    wun_008 发表于 2022-4-20 17:36
    ros 支持万兆吗?需要花钱吗
    chr ovf白嫖
  • 游客
    56
返回