5.4 KiB
dae与OPNsense: 最佳实践
本教程展示了如何以旁挂的方式将dae和OPNsense一起使用。dae安装在另一个Linux系统中,和OPNsense通过以太网连接(物理连接、Linux网桥或SR-IOV)。
接口
你应该为dae和OPN之间的接口分配和OPN的LAN不同网段的地址。如果把这个接口称为wan_proxy,配置如下:
OPN LAN: 192.168.1.1/24
OPN wan_proxy: 192.168.2.2 网关 自动检测
dae enp1s0:192.168.2.1 网关 192.168.2.2
分流
1.配置geoip列表
在
防火墙:别名:GeoIP设置
中添加,参考OPN文档。
2.配置geoip别名
在
防火墙:别名:别名
处添加别名proxyip,选择GeoIP类型,在显示的区域Asia中选择China(或你所在的其他国家)。
3.添加额外IP地址列表(可选)
在
防火墙:别名:别名
处添加别名proxyip_ex,选择URL Table类型,可添加其他人维护的IP列表链接,文件内容为每行一个CIDR表示的IP地址。
4.配置保留地址别名
在
防火墙:别名:别名
处添加别名__private_network,选择Network类型,添加所有保留地址(或仅添加自己网络中使用到的保留地址),参考保留IP地址。
5.聚合以上别名
在
防火墙:别名:别名
处添加别名proxyroute,选择Network group类型,内容选择proxyip、proxyip_ex(如果有)、__private_network以及系统内置的__lo0_network别名,对其进行聚合。
6.添加网关
在
系统:网关:单个
处添加网关proxy,接口选择和dae之间的接口wan_proxy,IP为dae的IP,按上文接口示例这里填写192.168.2.1,优先级须低于默认网关,如默认网关设为254,这里设为255。
7.分流规则
在
防火墙: 规则: 浮动
处添加规则,进行如下配置:
项目 | 配置 |
---|---|
操作 | 通过 |
快速 | √ |
接口 | LAN |
方向 | in |
TCP/IP版本 | IPv4 |
协议 | TCP/UDP |
目标/反转 | √ |
目标 | proxyroute |
网关 | proxy |
此外可以通过源、源/反转来排除局域网设备,使其流量不会被分流到dae。
8.允许dae流量进入OPN
在
防火墙:规则:wan_proxy
新建规则,全部保持默认保存即可。
9.OPN自身代理(可选)
如果需要让OPN自己的某些流量走代理,如使用Google Drive备份配置,建议在
系统: 路由: 配置
中添加静态路由规则进行配置,将需要走代理的IP段,网关设为proxy。不建议在浮动规则中对WAN流量进行处理,可能会造成回环。
dae相关配置
本节不涉及dae的配置文件内容,只给出如何配置使DNS请求经过dae,以及常见的代理正常直连不通问题的解决方法。以下提到的dae的domain
、ip
模式以及如何配置dae的dns
和routing
规则,请查阅dae文档。
使用dae进行透明代理,要使基于域名的分流规则正常工作,domain
和domain+
模式下需要DNS请求经过dae(注意不是将DNS服务器设为dae地址,dae不监听53端口)。若DNS请求不经过dae,需要使用dae的domain++
模式(根据sniff到的域名再匹配一次分流规则,性能不如domain
模式)。如使用domain++模式,或不需要根据域名分流而使用ip
模式,以下配置可忽略。
1.DNS转发配置
在
服务: Unbound DNS: 查询转发
中设置,将DNS请求转发到指定服务器,如配置为OpenDNS的208.67.222.222。下面步骤需要设置静态路由规则,将该地址网关设为dae,因此不要使用你的上游下发的DNS,以便在排查DNS问题时,可以正常使用dig或nslookup向上游下发的DNS服务器查询进行测试。
2.静态路由配置
在
系统: 路由: 配置
中添加静态路由规则,网络设为208.67.222.222/32,网关设置为proxy。
经过如上配置可以使DNS请求经过dae,并被dae劫持处理,这里设置的DNS服务器并不是最终查询的服务器,DNS查询的目标服务器会被dae根据dae配置中的dns规则改写,然后发送DNS查询请求。
需要注意的是Unbound会在转发客户端发出的DNS请求时,追加EDNS相关参数,这样可能会从上游服务器取得长度超大(偶见大于2000)的DNS响应,从而导致dae处理udp DNS的缓冲区溢出(出于性能考虑,dae没有使用更大的缓冲区,tcp的DNS不会溢出),最终表现是客户端无法拿到DNS响应,甚至导致dae功能崩溃。要解决这个问题,可以改用Dnsmasq或在服务:Unbound DNS:常规
中关闭EDNSSEC支持并写入如下Unbound配置,该配置可以有效减小返回的DNS响应大小:
# 存为 /usr/local/etc/unbound.opnsense.d/disableedns.conf
server:
disable-edns-do: yes
此外,由于dae不会进行snat,如果出现代理正常直连不通[这里指的是dae routing
中的direct,而不是OPN没有分流给dae直接出wan口的流量。如根据上节配置的分流规则,OPN会将steam的流量分流经过dae,dae在routing
配置了domain(geosite:steam@cn) -> direct,steam无法正常登录或下载],在安装dae的系统中配置nat即可。
性能优化
将OPN和dae之间的MTU值从默认的1500改为9000(需要修改两者接口及中间链路),可以获得更低负载。