2024-01-23 20:06:24 +07:00
|
|
|
|
# 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文档](https://docs.opnsense.org/manual/how-tos/maxmind_geo_ip.html)。
|
|
|
|
|
|
|
|
|
|
2.配置geoip别名
|
|
|
|
|
|
|
|
|
|
> 在`防火墙:别名:别名`处添加别名proxyip,选择GeoIP类型,在显示的区域Asia中选择China(或你所在的其他国家)。
|
|
|
|
|
|
|
|
|
|
3.添加额外IP地址列表(可选)
|
|
|
|
|
|
|
|
|
|
> 在`防火墙:别名:别名`处添加别名proxyip_ex,选择URL Table类型,可添加其他人维护的IP列表链接,文件内容为每行一个CIDR表示的IP地址。
|
|
|
|
|
|
|
|
|
|
4.配置保留地址别名
|
|
|
|
|
|
|
|
|
|
> 在`防火墙:别名:别名`处添加别名\_\_private_network,选择Network类型,添加所有保留地址(或仅添加自己网络中使用到的保留地址),参考[保留IP地址](ttps://www.wikiwand.com/zh-hant/保留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 |
|
2024-05-20 20:02:51 +07:00
|
|
|
|
| 网关 | proxy |
|
2024-01-23 20:06:24 +07:00
|
|
|
|
|
|
|
|
|
> 此外可以通过源、源/反转来排除局域网设备,使其流量不会被分流到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查询请求。
|
|
|
|
|
|
2024-05-13 17:44:36 +07:00
|
|
|
|
需要注意的是Unbound会在转发客户端发出的DNS请求时,追加EDNS相关参数,这样可能会从上游服务器取得长度超大(偶见大于2000)的DNS响应,从而导致dae处理udp DNS的缓冲区溢出(出于性能考虑,dae没有使用更大的缓冲区,tcp的DNS不会溢出),最终表现是客户端无法拿到DNS响应,甚至导致dae功能崩溃。要解决这个问题,可以改用Dnsmasq或在`服务:Unbound DNS:常规`中关闭EDNSSEC支持并写入如下Unbound配置,该配置可以有效减小返回的DNS响应大小:
|
2024-01-23 20:06:24 +07:00
|
|
|
|
|
|
|
|
|
``` yaml
|
|
|
|
|
# 存为 /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(需要修改两者接口及中间链路),可以获得更低负载。
|