树莓派+pi-hole+clash实现远程办公网络


在家办公,家里所有设备都想上公司vpn,实现无缝的办公体验,可以随意连接公司网络,但是不能把所有流量都导到公司去,要不然什么都被公司知道了。所以我们要分流, 公司的域名和ip走公司的vpn,其它都是直接走路由器了.

还有就是公司vpn要独立部署,不能直接在路由器上面连接,这样会导致整个路由器的流量都走到公司,还有就是影响路由器的性能。

网络拓扑

  1. 如果要全部流量都经过clash的话,可以将对应的设备的dns设置成192.168.50.7,并且把网关设置成192.168.50.8i
  2. 如果只是部分流量经过clash的话,可以将对应的设备的dns设置成192.168.50.7, 网关默认是192.168.50.1

硬件需求

  1. 路由器(支持修改网关和添加静态路由)
  2. 树莓派(支持运行docker的设备,比如nas)

配置树莓派

树莓派小巧,而且是arm架构,非常省电。性能上面也不错,可以跑docker,所以我们可以在树莓派上面部署clash和pi-hole

1. 树莓派设置成路由模式

开启转发模式,可以把其变成路由器

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

2. 安装docker

最新的安装方法可以参照官方文档. 目前docker是最方便的,虽然性能上可能会有一些损失,但是对于公司的vpn带宽来说是足够了。安装的过程中,需要注意的是,更换docker的源,否则可能会很慢。

3. 配置docker网络

  1. 开启混杂模式, 针对对应上网的网卡开启
ip link set eth0 promisc on
  1. docker创建网络,注意将网段改为你自己的
docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=eth0 macnet

3. 安装docker-compose

docker-compose是一个非常方便的工具,可以帮助我们快速的部署服务。安装方法可以参照官方文档, 直接使用pip安装即可.

多部署多个服务的时候,可以使用docker-compose来管理,比如clash和pi-hole

apt install docker-compose

配置clash

clash的配置文件可以参照官方文档, 这里只是简单的介绍一下。
在这里clash主要是用来分流,所以我们只需要配置dns和proxy就可以了。我们可以把公司的域名和ip写到规则里面,然后clash会自动的把这些流量安装有公司vpn的服务器上面。

  1. entrypoint.sh

    这个是docker的入口程序,主要是用来开启转发和启动clash, 开启转化非常重要,不然流量无法导入到clash中。

    #!/bin/sh
    #开启转发
    echo "1" > /proc/sys/net/ipv4/ip_forward
    ip addr
    /clash
  2. DockerFile

    下面这个docker是在官方的clash-premium的基础上面改的,主要是增加了一个entrypoint.sh, 以及增加了一个健康检查,如果clash挂了,会自动重启。

    FROM dreamacro/clash-premium:latest
    
    COPY entrypoint.sh /usr/local/bin/
    RUN chmod a+x /usr/local/bin/entrypoint.sh
    HEALTHCHECK --interval=5s --timeout=3s \
      CMD curl --connect-timeout 5  -x 192.168.50.8:7890 https://www.baidu.com || kill 1
    ENTRYPOINT ["entrypoint.sh"]
  3. docker-compose.yml

    这个是docker-compose的配置文件,主要是用来配置clash的,这里需要注意的是,clash需要开启特权模式,否则无法开启转发,同时需要设置ulimit, 默认的ulimit是1024,这个是不够的,所以需要设置成更大的值。

    还有一个设置就是网络配置,这里把docker网络类型设置成macnet,相当于在网络中一个独立设备,并给其设置静态ip, 这样方便其它设备访问, 使用的上面docker创建的macnet网络。

    我们直接映射本地的配置文件到docker中,这样可以方便的修改配置文件, 重启docker原来的配置还都在,不会丢失。

    version: '3'
    services:
      clash:
        build: .
        image: clash
        privileged: true
        volumes:
          - ./config/:/root/.config/clash/
        restart: always
        ulimits:
          memlock: -1
          nproc: 65535
          nofile:
            soft: 20000
            hard: 40000
        networks:
          macnet:
            ipv4_address: "192.168.50.8"
    
    networks:
      default:
        external:
          name: macnet
      macnet:
        external: true
  4. clash配置

    clash的配置文件可以参照官方文档, 这里主要是加了dns和tun的配置,dns是用来解析域名,tun接收所有流量,然后根据规则分流。

    dns:
        enable: true
        listen: 0.0.0.0:53
        enhanced-mode: fake-ip
        ipv6: false
        nameserver:
        - "https://1.1.1.1/dns-query"
        - "8.8.8.8"
        - "1.1.1.1"
        fake-ip-filter:
          - 'stun.*.*'
          - 'stun.*.*.*'
    
    interface-name: eth0
    tun:
      enable: true
      stack: system
      dns-hijack:
        - any:53
      auto-route: true
      auto-redir: true
  5. 启动clash

    执行docker-compose up -d启动服务,后面系统重启也是会自动重启的。

    可以通过docker-compose logs -f --tail 100查看日志。

    更新最新的镜像

    sudo docker pull dreamacro/clash-premium:latest

    更新完成后要重新构建clash

    sudo docker-compose up --force-recreate --build -d  --remove-orphans

安装pi-hole

pi-home是一个非常在名的dns服务器,可以用来屏蔽广告,以及做一些其他的事情,比如屏蔽一些不良网站,或者屏蔽一些公司的网站。

而且pi-home有web ui管理界面,可以方便的管理。还有详细的数据统计,可以看到每个设备的访问情况,所有域名的dns解析情况等等。

使用docker-compose安装

我们可以使用docker-compose来安装pi-home, 这样可以方便的管理,比如升级,重启等等。网络配置和上面的clash一样,主要是分配一个固定ip,方便其它设备访问。其它的设置就是端口映射,以及设置密码, 还有就是配置文件映射. 具体的docker-compose配置如下:

version: '3'
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
      - "80:80/tcp"
    environment:
      TZ: 'Asia/Shanghai'
      WEBPASSWORD: 'password'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
    restart: unless-stopped
    networks:
      macnet:
        ipv4_address: "192.168.50.7"

networks:
  default:
    external:
      name: macnet
  macnet:
    external: true

启动安装pi-hole

运行 docker-compose up -d来构建和启动pi-hole, 会下载一些镜像,需要等待一段时间, 如果下载比较慢,可以尝试使用国内的镜像源。
这个命令不仅简单方便,还不用自己管理service, 重启系统也会自动重启。

打开pi-hole的web界面

  1. 默认网址为: http://192.168.50.7/admin, 密码是password, 登录到界面里面就可以直接界面上操作了。里面还可以设置block dns的域名。
  2. accelerated-domains.china.conf下载dns配置,将手动将里面的114.114.114.114替换成192.168.50.7, 保存到etc-dnsmasq.d/文件夹下面。

配置路由器

设置静态ip

每个路由器的设置方法不一样,有些路由器是可以直接在管理界面添加。下面是我用的红米AX6000路由器的设置方法

vim /etc/config/network

config route
	option interface 'lan'
	option target '198.18.0.0'
	option netmask '255.255.0.0'
	option gateway '192.168.50.8'

config route
	option interface 'lan'
	option target '149.154.164.0'
	option netmask '255.255.252.0'
	option gateway '192.168.50.8'

config route
	option interface 'lan'
	option target '149.154.160.0'
	option netmask '255.255.252.0'
	option gateway '192.168.50.8'

config route
	option interface 'lan'
	option target '91.108.4.0'
	option netmask '255.255.252.0'
	option gateway '192.168.50.8'

config route
	option interface 'lan'
	option target '91.108.56.0'
	option netmask '255.255.252.0'
	option gateway '192.168.50.8'

config route
	option interface 'lan'
	option target '91.108.8.0'
	option netmask '255.255.252.0'
	option gateway '192.168.50.8'

config route
	option interface 'lan'
	option target '95.161.64.0'
	option netmask '255.255.240.0'
	option gateway '192.168.50.8'

上面是添加了fake ip网段,还有添加了所有公司的ip段,这样就可以直接访问公司的网站了。

设置dns和网关

  1. 设置主路由的dns

    在路由器管理界面,设置dns1为192.168.50.7, dns2为192.168.50.1, 一般在局域网配置里面设置。

  2. 设置具体设备的dns和网关

    # 主路由网关 192.168.50.1, 主路由 DNS 192.168.50.1
    # 旁路由网关 192.168.50.8, 旁路由 DNS 192.168.1.7
    
    config dhcp 'lan'
        list dhcp_option '3,192.168.50.1'
        list dhcp_option '6,192.168.50.1'
    
    config tag 'clash'
        option dhcp_option '3,192.168.50.8 6,192.168.1.7'
        option force '1'
    
    config host
        option ip '192.168.50.100'
        option mac 'xx:yy:xx:yy:xx:yy'
        option tag 'clash'

    上面是把设置xx:yy:xx:yy:xx:yy, ip设置成192.168.50.100, 并且将tag设置成clash。这样就可以设置成旁路由的dns和网关。

  3. 设置某个网段的dns和网关

    dhcp-range=set: clash,192.168.1.100,192.168.1.200
    dhcp-option=tag: clash,3,192.168.1.2
    dhcp-option=tag: clash,6,192.168.1.2

    上面是将100到200的ip段的dns和网关设置成旁路由的dns和网关。

结尾

上面所有的配置完成后,可以使用手机或者电脑测试一下,看看是否能正常上公司网络。如果可以的话,就成功了。如果不通,就要一个一个的排查了。公司vpn在docker里面的搭建后面再写一篇文章。


文章作者: Payne Fu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Payne Fu !
评论
  目录