EdgeRouter Policy Based Routing Using DNSMASQ IPSET

之前用SNIProxy按域名区分流量,着实麻烦。尤其是后期发现路由表莫名其妙出问题。

EdgeRouter的Policy Based Routing(PBR)使用的是自带配置语法的firewall modify功能。
官方有两篇教程:
EdgeRouter – Policy-based routing for destination port
EdgeRouter – Policy-based routing (source address based)

第二篇文章顺带提了network-group。之前在配置VPN时,使用过network-group,还比较过使用firewall modify + network-group 与配置一堆interface-route的区别。

而,这里的network-group的实现,使用了netfilter的ipset。Man pages可以看这里,命令在edgerouter上也附带了。

dnsmasq支持 ‘–ipset‘ 参数,把对配置域名解析的IP存入到指定的ipset。具体细节可以看dnsmasq的文档

dnsmasq配置的语法比较简单。

domain 部分参考 address 的语法。例如:

配置好所有自己需要的域名,重启dnsmasq即可。

ipset本身支持timeout,但是edge os的network-group不支持,所以在配置dnsmasq之前,最好创建一个新的network-group。

假定新建的ipset名叫 MY_SET,edge router的主要相关配置如下:

其他诸如配置 static table, interface firewall 可以参考最前边的文档。

EdgeRouter Policy Based Routing Using DNSMASQ IPSET by @sskaje: https://sskaje.me/2017/04/edgerouter-policy-based-routing-dnsmasq-ipset/

Incoming search terms:

EdgeRouter PPtP Server访问本地DNS服务

UBNT EdgeRouter 自带了PPTP Server,典型的配置方法是

官方参考guide: https://help.ubnt.com/hc/en-us/articles/205220840-EdgeMAX-PPTP-VPN-with-local-users-RADIUS

这个案例里,我的路由eth0是LAN口,eth0的IP是 192.168.100.1,这个配置下我的pptp客户端能正常访问到我的内网的机器。
但是如果我需要把DNS设成 192.168.100.1,DNS请求就会一直没响应。
路由端抓 UDP 53 的包,可以看到pptp客户端发出的dns请求,但是没有回包。
看了眼/etc/dnsmasq.conf:

man dnsmasq

-i, –interface=
Listen only on the specified interface(s). Dnsmasq automatically adds the loopback (local) interface to the list of interfaces to use when the –interface option is used. If no –interface or –listen-address options
are given dnsmasq listens on all available interfaces except any given in –except-interface options. IP alias interfaces (eg “eth1:0”) cannot be used with –interface or –except-interface options, use –listen-
address instead. A simple wildcard, consisting of a trailing ‘*’, can be used in –interface and –except-interface options.

尝试了加一个 interface=pptp*,无效。
顺手先把dnsmasq的请求隔离到一个新的网段 192.168.101.0/24,服务端的local-ip设成 192.168.101.1,推送dns 192.168.101.1,再设置options ‘listen-address=192.168.101.1’,解决。
全部命令如下

EdgeRouter PPtP Server访问本地DNS服务 by @sskaje: https://sskaje.me/2016/02/edgerouter-pptp-server-dns-service/

Incoming search terms:

UBNT EdgeOS 配置设备路由(interface-route)的方法

之前 EdgeOS PPTP VPN客户端配置 里,配置VPN后,需要按需配置路由。由于自用的路由下一跳IP不确定,所以用了 interface-route

配置命令如下:

按这种方式配置路由的麻烦在于,每次输入都需要把目标网段后边配上一个interface,万一哪天需要改这个interface,要不一个一个改,要不重新导入配置文件。

另外一个方法是用路由表+防火墙
路由表如下:

防火墙里配置一个地址组,并配好modify规则

再把内外网口的防火墙规则改一下

就行了。这里我的eth1连的外网,eth0是LAN。

不过这里有个case我没试过,直接配置interface-route的方法,如果目标网段的interface掉了,会回落到默认的出口上,不知道modify的效果如何。

EdgeOS 1.8b3下firewall的log记录在 /var/log/messages 里,可以看到请求命中了哪个规则。

UBNT EdgeOS 配置设备路由(interface-route)的方法 by @sskaje: https://sskaje.me/2016/02/ubnt-edgeos-set-interface-route/

Incoming search terms:

HE.net Dynamic DNS on Ubiquiti Router

HE.net provides free DDNS service, compatible with DynDNS’s update format.
Link: Dynamic DNS on HE.net.

I’m using Ubiquiti EdgeRouter Lite, Dynamic DNS support can be found from web GUI console, but the server address is not configurable.

Here is a copy of my config:

You can also configure from CLI.

1 Pick the right interface
2 Set server
3 DO NOT SAVE OR UPDATE FROM WEB GUI CONSOLE!

HE.net Dynamic DNS on Ubiquiti Router by @sskaje: https://sskaje.me/2015/03/he-net-ddns-on-ubnt-router/

Incoming search terms: