config: add forwarding with ipset guide.

This commit is contained in:
Nick Peng
2023-03-11 16:51:50 +08:00
parent 39efbda313
commit 55966e5b3f
3 changed files with 228 additions and 55 deletions

View File

@@ -12,77 +12,62 @@ hide:
iptable成熟的路由规则配置工具。
nftable更加强大的规则配置工具正在成为主流。
1. 模式TPROXYREDIRECT
## ipset配置
TPROXY支持UDPTCP的转发配置稍复杂。
REDIRECT仅支持TCP配置简单。
1. 基本配置
1. 配置REDIRECT或TPROXY转发规则
通过如下参数可以配置指定域名的IPSet规则
在smartdns.conf中设置需要透明转发的域名列表比如要将`example.com`进行透明转发。则使用ipset选项设置`example.com`的ipset规则为`proxy`
```shell
nftset /domain/[#4:ip#table#set,#6:ipv6#table#setv6]
```
```shell
# 设置规则
# -ipset proxy: 匹配的域名设置到ipset:tproxy中。
# -c none: 停用测速
# -address #6: 停用IPV6解析。
domain-rules /example.com/ -ipset proxy -c none -address #6
```
1. 超时
1. 方式一: TCP REDIRECT转发
SmartDNS设置IPSet支持设置是否启用超时功能这样可以避免IPSet中过多IP地址网关性能下降。启用方式为
- 此方式配置简单仅支持TCP的转发。
执行shell命令设置iptable规则如果仅转发TCP则可以直接使用REDIRECT的规则如果需要同时转发UDP和TCP可以使用TPROXY的转发规则。如下规则按实际需求选择。具体配置如下
```shell
nftset-timeout yes
```
```shell
# 创建ipset集合
ipset create proxy hash:net
# 设置转发规则将匹配的请求转发到本机的1081端口
iptables -t nat -I PREROUTING -p tcp -m set --match-set proxy dst -j REDIRECT --to-ports 1081
```
1. 测速失败后自动添加到IPSet
- 在本机1081端口开启REDIRECT模式的转发程序。
SmartDNS可以将测速失败的IP地址加入IPSet再由相关IP规则转发
1. 方式二TCP/UDP TPROXY转发
```shell
nftset-no-speed ipsetname
```
- 此方式可同时转发TCP和UDP。
执行shell命令设置iptable规则将匹配的域名TCP/UDP请求进行TPROXY方式透明转发规则参考如下
1. DEBUG调试
```shell
# 设置路由规则
ip rule add fwmark 1104 lookup 1104
ip route add local 0.0.0.0/0 dev lo table 1104
如需要Debug调试可以开启nftset的调试功能。
# 创建ipset集合
ipset create proxy hash:net
```shell
nftset-debug yes
```
# 设置转发规则UDPTCP方式的TPROXY转发
iptables -t mangle -N SMARTDNS
iptables -t mangle -A SMARTDNS -p tcp -m set --match-set proxy dst -j TPROXY --on-ip 127.0.0.1 --on-port 1081 --tproxy-mark 1104
iptables -t mangle -A SMARTDNS -p udp -m set --match-set proxy dst -j TPROXY --on-ip 127.0.0.1 --on-port 1081 --tproxy-mark 1104
iptables -t mangle -A SMARTDNS -j ACCEPT
iptables -t mangle -A PREROUTING -j SMARTDNS
```
## nftset配置
- 在本机的1081端口启动IP透明转发程序。
1. 基本配置
1. 额外说明
通过如下参数可以配置指定域名的NFTSet规则
- 为保证DNS查询结果的位置亲和性可以使用smartdns的`server`代理参数,将对应域名的查询请求,通过代理查询,使结果位置更好。如:
```shell
ipset /domain/ipset
```
```shell
# 增加DNS上游并设置通过名称为proxy的代理查询查询组为pass
server 1.2.3.4 -proxy proxy -group pass -exclude-default-group
# 设置代理服务器信息代理的名称为proxy
proxy-server socks5://user:name@1.2.3.4 -name proxy
# 设置域名规则对匹配的域名使用代理查询结果并将结果设置到ipset中。
domain-rules /example.com/ -ipset proxy -c none -address #6 -nameserver pass
```
1. 超时
- 如需要配合测速自动完成ipset的设置可增加如下配置参数
SmartDNS设置IPSet支持设置是否启用超时功能这样可以避免NFTSet中过多IP地址网关性能下降。启用方式为
```shell
ipset-no-speed proxy
```
```shell
ipset-timeout yes
```
如果使用OpenWrt的luci界面可以直接在界面配置相关的域名分流规则。
1. 测速失败后自动添加到IPSet
SmartDNS可以将测速失败的IP地址加入IPSet再由相关IP规则转发
```shell
ipset-no-speed ipsetname
```