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

94 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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(需要修改两者接口及中间链路),可以获得更低负载。