dae/docs/zh/tutorials/dae-with-opnsense.md

94 lines
5.4 KiB
Markdown
Raw Normal View History

# 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 enp1s0192.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_proxyIP为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响应大小
``` yaml
# 存为 /usr/local/etc/unbound.opnsense.d/disableedns.conf
server:
disable-edns-do: yes
```
此外由于dae不会进行snat如果出现代理正常直连不通[这里指的是dae `routing`中的direct而不是OPN没有分流给dae直接出wan口的流量。如根据上节配置的分流规则OPN会将steam的流量分流经过daedae在`routing`配置了domain(geosite:steam@cn) -> directsteam无法正常登录或下载]在安装dae的系统中配置nat即可。
## 性能优化
将OPN和dae之间的MTU值从默认的1500改为9000(需要修改两者接口及中间链路),可以获得更低负载。