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

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

本帖最后由 guitengyue 于 2022-4-25 22:28 编辑

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 ]
:log info (“CN-list-update:”.”$CN”.”rule”)
/file remove
对来源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

word复制出来的,格式咋变这样了。。。。。。

你这好壮观呀,这么多虚拟机

感觉好复杂,物理机直接op感觉最方便

格式看傻了,等修复了再研究一下https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

本帖最后由 sevastian 于 2022-4-20 15:34 编辑

感觉毫无必要,本质就是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
:INPUT ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
:VSERVER –
-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
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
:SUB_IN –
:V2 –
#子网进入流量
-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表的概念了,再往前多走一步,就知道现在这个结构有多么累赘。

liansishen 发表于 2022-4-20 14:36
格式看傻了,等修复了再研究一下

不知道怎么修复。。。word导入的就这样了?

sevastian 发表于 2022-4-20 14:44
感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。

那请你立即关闭网页,也不知道你点进来干嘛

xiaokin 发表于 2022-4-20 14:27
感觉好复杂,物理机直接op感觉最方便

物理机和op也一样适用

tian349776608 发表于 2022-4-20 14:19
你这好壮观呀,这么多虚拟机

嗯,这几个都要用到

guitengyue 发表于 2022-4-20 14:50
不知道怎么修复。。。word导入的就这样了?

编辑里面把相应的代码改一下,图片路径删了https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

sevastian 发表于 2022-4-20 14:44
感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。

我就说一句话也能急眼啊。那我把我 …

对,我感觉ros的核心就是mangle和route,几乎可以实现所有的功能
前几天因为碰到问题,在论坛问了,也因此受了启发,解决了一些实际问题,发帖的意义给若干天以后的自己查看,也给其他类似玩法的坛友一个启发

可惜ROS不支持NAT1,或者说是不能给一部分IP以NAT1,不然还是挺喜欢这系统的~

wswcx 发表于 2022-4-20 15:52
可惜ROS不支持NAT1,或者说是不能给一部分IP以NAT1,不然还是挺喜欢这系统的~ …

https://www.youtube.com/watch?v=XihnUAo2soA
nat里面,就2条,好像能实现,你试试
我因为没有nat1需求,没测试过

sevastian 发表于 2022-4-20 14:44
感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。

我就说一句话也能急眼啊。那我把我 …

留个记号,慢慢学习

esxi在家里用缺点就一个,不启用ha的话,硬件出点故障就全部GG了。

ros 支持万兆吗?需要花钱吗

留个记号,慢慢学习

好像少了端口转发,这种设置法影响端口转发吗?

wun_008 发表于 2022-4-20 17:36
ros 支持万兆吗?需要花钱吗

支持
可花钱买正版

zwb0619 发表于 2022-4-20 20:12
好像少了端口转发,这种设置法影响端口转发吗?

不影响
端口转发还是按照原来设置方法
nat中添加便可

ros觉得入门门槛好难。。。。界面太不友好了。。是我太笨了,完全不会配置

本帖最后由 ctz556 于 2022-4-20 21:18 编辑

楼主给个网络拓扑图呀!我居然没看明白。实现透明旁路由吗(ROS主路由,OP旁路由)?

前一阵折腾过,结果国内网站上不去了,应该是产生回路了,OP加了伪装也还是不行就没再折腾了。dhcp option指定网关更简单。

ctz556 发表于 2022-4-20 21:15
楼主给个网络拓扑图呀!我居然没看明白。实现透明旁路由吗(ROS主路由,OP旁路由)?

前一阵折腾过,结果 …

明天抽空补一个吧
ros主,op旁

shiho 发表于 2022-4-20 20:38
ros觉得入门门槛好难。。。。界面太不友好了。。是我太笨了,完全不会配置 …

接触一下就会了,其实还是蛮简单的,有需求就上,没需求就还是一个op当主路由算了

shiho 发表于 2022-4-20 20:38
ros觉得入门门槛好难。。。。界面太不友好了。。是我太笨了,完全不会配置 …

界面真是太丑太简陋了,和UBNT一比更没法看。。。

最近我也在折腾ros,其中一个目的就是实现楼主说的这种ip白名单分流。目前还卡在多播之后给个别线路和客户端指定upnp或者dmz

sevastian 发表于 2022-4-20 14:44
感觉毫无必要,本质就是ipset和策略路由的事情,随便找个linux都能做。

我就说一句话也能急眼啊。那我把我 …

整复杂了,单一系统实现更好,没必要额外引入一套系统提升复杂度降低效率。

guitengyue 发表于 2022-4-20 15:54
https://www.youtube.com/watch?v=XihnUAo2soA
nat里面,就2条,好像能实现,你试试
我因为没有nat1需求 …

感谢大佬指点~~回头试试
更多精彩尽在-羊毛盒子

© 版权声明
THE END
喜欢就支持一下吧
点赞13
分享
评论 抢沙发
Liberty的头像-羊毛盒子

昵称

取消
昵称表情代码图片