使用virtualbox模拟路由器功能并实现广告过滤
Contents
上个周末去深圳玩, 正好看到朋友家的路由器, 他和我讲这是一个软路由. 针对国内的网站可以走国内线路, 国外的网站可以走国外的线路. 周末在家正好间研究一下路由器功能. 我知道读者想听什么, 不过我不打算介绍. 你可以利用我的方案去使用virtualbox建立模拟路由器来模拟调试.
博客主要想介绍虚拟机路由器功能的实现以及家用路由器过滤广告的一种方案.
如果使用OpenWRT
系统就显得很省事了, 而且整个过程显得很傻瓜, 因为大家都帮你把方案做好了. 所以这里使用的虚拟机是Ubuntu server
, Linux
用习惯了, 哪个系统都可以的. 折腾路由器还是高中时候的梦想, 我觉得比较有趣吧, 也不是什么新鲜玩意.
网络结构
网络结构如下:
虚拟机创建
我们需要创建两台虚拟机, 一台用于做路由器, 另一台用作普通电脑, 可以有技巧的创建.
首先至少你要有一台Ubuntu
机器, 然后右键点击复制, 可以马上增加一台新的虚拟机, 还有什么快照功能也可以试试.
网卡配置
对于路由器, 需要两张网卡
第一张, 用于访问外网
第二张, 提供路由功能
![][4]
对于普通电脑
仅需要一张网卡
![][5]
注意, 这张网卡需要关闭dhcp功能, 具体配置是: 管理
=>主机网络管理器
=> 不勾选dhcp功能
![][6]
路由器功能实现
平时我们利用路由器上网时, 路由器本身一般有IP192.168.1.1
, 而后通过dhcp协议为我们分配IP192.168.1.xxx
.
所以在路由器中需要, 1. 固定网卡的IP地址, 2. 建立dhcp服务
固定网卡IP地址
Ubuntu比较新的版本利用了netplan
工具, 配置文件如下:
1 | root@UbuntuRoute:/home/corvo# cat /etc/netplan/00-installer-config.yaml |
这里enp0s3是路由器用来访问外部网站的网卡, enp0s8
是与子网连接的网卡.
建立dhcp服务器
Ubuntu中, 可以安装isc-dhcp-server
这个服务器工具, 修改如下配置, 表面dhcp服务器是为enp0s8网卡工作的.
1 | root@UbuntuRoute:/home/corvo# tail -2 /etc/default/isc-dhcp-server |
而后, 需要指定dhcp可以分配的网段
1 | root@UbuntuRoute:/home/corvo# tail -8 /etc/dhcp/dhcpd.conf |
普通电脑连接确认
1 | corvo@UbuntuClient:~$ ip addr show |
路由器增加数据包转发功能
目前我们的电脑已经获得了ip地址, 下一步就是上网操作, 主要有两步, 均在路由器上进行:
1 | # 允许内核在不同网卡间转发数据包 |
下一步你就可以试着在普通的电脑中上网了:
1 | corvo@UbuntuClient:~$ curl ip.sb |
内网DNS服务器搭建以及广告过滤功能
我之前的博客中已经介绍了DNS服务: https://corvo.myseu.cn/2018/07/30/2018-07-30-DNS%E7%9B%B8%E5%85%B3/
dns服务器建立
上面的例子中, dns服务器我们偷懒了, 用的是114.114.114.114
, 当然也是可以自建dns服务的, 一般来用dnsmasq
.
1 | # 安装dnsmasq |
这个时候你应该是无法访问任何网站的, 因为还没有配置dnsmasq
服务, 我是在配置文件中增加上游dns服务器, 然后重启dnsmasq.
1 | UbuntuRoute# tail -3 /etc/dnsmasq.conf |
修改dns服务器指向
由于我们使用了dhcp服务器, 修改的部分是dhcp服务器的配置, 修改完需要重启dhcp服务
1 | root@UbuntuRoute:/home/corvo# tail -8 /etc/dhcp/dhcpd.conf |
稍等几分钟, 或者你重启下那台用户电脑, 会发现它的dns地址改变了
1 | corvo@UbuntuClient:~$ resolvectl status | tail -3 |
一种广告过滤功能的实现
我接触的一些是通过dns劫持实现的, 比如这个黑名单,里面记载了广告, 分析网站的域名, 利用dnsmasq, 将它们的域名返回为0.0.0.0
1 | wget -O /etc/dnsmasq.d/notracking.conf https://raw.githubusercontent.com/notracking/hosts-blocklists/master/dnsmasq/dnsmasq.blacklist.txt |
然后打开dnsmasq的include功能, 增加conf-dir=/etc/dnsmasq.d/,*.conf
而后重启dnsmasq就可以达到想要的效果了, 例如
1 | # 路由器上的效果 |
广告过滤的功能基本就实现了.
总结
我主要想介绍下路由器简单的实现原理, 顺便介绍内网dns服务器的搭建和使用, 只了解了这些对你的目的来说应该是不够的,
建议多了解下iptables
, 你可以轻松的实现各种分流的效果. 当然, 你需要把dnsmasq也玩好.
[4]: https://rawforcorvofeng.cn/Snipaste_2020-12-06_22-04-33.png [5]: https://rawforcorvofeng.cn/Snipaste_2020-12-06_22-05-57.png [6]: https://rawforcorvofeng.cn/Snipaste_2020-12-06_22-07-45.png