DNSMASQ Send Different DHCP Options by Hosts

I choose DNSMASQ as DHCP server, and I want to push different ‘router’ setting to clients.

DNSMASQ supports tagging on hosts/ip ranges/subnets, I tag my mac address (with static ip-mac binding) as ‘prx’ and set ‘option:router’ to 192.168.1.20 if tag matches ‘prx’.

Here is my configuration:

DNSMASQ Send Different DHCP Options by Hosts by @sskaje: https://sskaje.me/2016/10/dnsmasq-send-dhcp-options-hosts/

内网半透明代理

因为不是传统意义上的透明代理,但是基本体验又差不多,姑且称之半透明代理。

背景

公司网络差,内网服务器的微信页面开发经常会被外网带宽影响到,一方面是因为引用了微信、阿里的js、css、字体等资源文件,另一方面,因为早前开发团队留下的坑,存在七牛云上的静态文件从接口端下发的url都带了实时的时间戳。

思路

先处理图片url带时间戳的坑,一方面接口是公共的,我在中间加了一层代理后,把无用的参数过滤掉,强制对结果做了一次小缓存;再安排接口端的同学改造遗留问题,确定了有意义的数据作为版本参数。这样至少保证终端用户能看到304,而不是每次都是200。

然后,所引用的静态文件,都是长时间不会修改的,公司网络如此糟糕的情况下,完全可以在本地搭建一个代理,把请求文件缓存下来。

方案

HTTP的代理很简单,nginx配置一个反向代理即可。
之前某些原因,nginx外边还加了一个haproxy,具体原因会在其他文章里解释。
haproxy可以作为 SNI proxy 使用,而流入的请求无非是http明文传输,或者https传输,需要代理的都是TCP的,所以 nginx 处理 http请求,haproxy 判断 SNI,转发tcp到定制的backend。

在此之前,需要在内网搭建 DNS 服务器,(这里我用了 dnsmasq),可以选择将内网 DHCP 的DNS服务器指向这里,或者把非 DNS 所在服务器的所有UDP 53的包转发到这个服务器上。

我的方案里,所有的服务都在内网的一台机器上。haproxy 监听了 内网IP的80,443端口,nginx 监听了 127.0.0.1:80,还有127.0.0.1:443给gitlab使用。

nginx配置很简单:

haproxy的配置同样:

需要指出的是,我ssl的backend的server,都是 dig 实际域名,拿第一级cname来用的。

最后 dnsmasq 劫持你所需要的域名的解析即可。

内网半透明代理 by @sskaje: https://sskaje.me/2016/10/semi-transparent-proxy/

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:

dnsmasq 劫持所有域名

dns劫持以前都是黑名单模式
有需要拦截的加server劫持整个域名解析

或者单个address劫持单记录

还可以通配模式

白名单模式先劫持所有域名

开放解析的时候只需要加server指向正常的DNS服务器就行

dnsmasq 劫持所有域名 by @sskaje: https://sskaje.me/2015/09/dnsmasq-%e5%8a%ab%e6%8c%81%e6%89%80%e6%9c%89%e5%9f%9f%e5%90%8d/

Incoming search terms:

Mac DNS解析失败

OS X 10.10.4
使用ping提示ping: cannot resolve xxx.xxx.xxx: Unknown host
但是使用dig可以解析域名。

Mac DNS解析失败 by @sskaje: https://sskaje.me/2015/07/mac-dns%e8%a7%a3%e6%9e%90%e5%a4%b1%e8%b4%a5/

Incoming search terms: