0%

树莓派+PPTP+chnroutes+dnsmasq分流+Clash局域网共享


PPTP协议在没有配置智能分流的情况下,上网需要来回切换略显麻烦,有没有什么办法可以和ssr客户端和V2ray客户端那样实现分流呢?解决这个问题以后又会发现一个新的问题PPTP用的是google的dns,解析到的ip地址未必是适合的ip导致某些网站访问速度很慢,如果一个账号能让任意设备共享网络,省去折腾各个终端安装和配置那就太好了,最近利用家里的树莓派实现了这个需求,下面是我的折腾记录,有更好的方法欢迎留言交流~


安装PPTP的linux客户端

  1. apt-get安装pptp-linux
    sudo apt-get install pptp-linux

  2. 修改pptp-linux的配置文件

    sudo vi /etc/ppp/peers/pptpconf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    pty "你的服务端地址 --nolaunchpppd"
    name 账号
    password 密码
    remotename PPTP
    require-mppe-128
    require-mschap-v2
    refuse-eap
    refuse-pap
    refuse-chap
    refuse-mschap
    noauth
    persist
    maxfail 0
    defaultroute
    replacedefaultroute
    usepeerdns
  3. 启动/关闭PPTP
    sudo pon pptpconf
    开启后,如果连接正常,ifconfig可以看到PPTP的连接ppp0

  4. 设置开机启动服务 sudo vi /lib/systemd/system/pptp.service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Unit]
    Description=PPTP Service
    After=network.target

    [Service]
    Type=forking
    ExecStart=/usr/bin/pon pptpconf

    [Install]
    WantedBy=multi-user.target
  5. 刷新并启动服务

    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl enable pptp
    sudo systemctl start pptp

    chnroutes分流策略

    根据请求ip分流,某些网站强制转发到ppp0使用PPTP访问,某些网站不使用,这里记录PPTP下的使用方法,其它协议的使用方法可以查看官网:https://github.com/fivesheep/chnroutes

1
2
3
git clone https://github.com/fivesheep/chnroutes.git
cd chnroutes
sudo python chnroutes.py -p linux; sudo chmod a+x ip-pre-up; sudo cp ip-pre-up /etc/ppp; sudo chmod a+x ip-down; sudo cp ip-down /etc/ppp/ip-down.d/

clash开启http/https/socks5代理

  1. 安装clash
  • 下载安装包

    sudo wget https://github.com/Dreamacro/clash/releases/download/v1.6.5/clash-linux-armv7-v1.6.5.gz

  • 解压

    sudo gunzip clash-linux-armv7-v1.6.5.gz

  • 移动到系统目录

    sudo mv clash-linux-armv7-v1.6.5 /usr/local/bin/clash

  • 设置可执行权限

    sudo chmod +x /usr/local/bin/clash

  1. 设置配置文件
    sudo vi ~/.config/clash/config.yaml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # port of HTTP
    port: 7890

    ## port of SOCKS5
    socks-port: 7891

    # `allow-lan` must be true in your config.yml
    allow-lan: true

    # set log level to stdout (default is info)
    # info / warning / error / debug / silent
    log-level: info

    # A RESTful API for clash
    #使用0.0.0.0可以使用局域网设备访问
    external-controller: 0.0.0.0:8080

    mode: Rule

    sudo clash启动,这样我们就拥有http/https/socks5的代理服务器了,任意设备只要配置树莓派的ip地址和对应协议的端口号即可代理请求,如果有公网ip或内网穿透,有域名+ddns解析服务器那么在外网也可以代理

  2. 设置开机启动服务

    sudo vi /etc/systemd/system/clash.service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Unit]
    Description=Clash Service
    After=network.target

    [Service]
    Restart=on-abort
    LimitNOFILE=1048576
    ExecStart=/usr/local/bin/clash -d /home/pi/.config/clash

    [Install]
    WantedBy=multi-user.target
  3. 转发所有请求 sudo vi /etc/sysctl.conf

  • ipv4的请求,修改

    net.ipv4.ip_forward=1

  • ipv6的请求,修改

    net.ipv6.conf.all.forwarding = 1
    刷新设置

    sudo sysctl -p
    流量强制转发到ppp0
    sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

    dnsmasq + dnsmasq-china-list 本地DNS分流策略

  1. apt-get安装dnsmasq

    sudo apt install dnsmasq

  2. 设置配置文件

    sudo vi /etc/dnsmasq.conf

    1
    2
    3
    no-resolv
    server=8.8.8.8
    server=8.8.4.4
  3. 用dnsmasq-china-list设置白名单,用运营商dns去解析,其它用google的dns解析,否则解析到的ip并不是访问速度快的最适合的ip,导致网站和App的访问速度太慢了,所以太干净的dns解析也不好

  • 运营商分配的DNS地址假设为223.5.5.5,切换到su用户,拉取不需要走PPTP的地址用运营商分配的DNS地址去解析
    1
    curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf|sed 's/114.114.114.114/223.5.5.5/g' >/etc/dnsmasq.d/accelerated-domains.china.223.5.5.5.conf
  1. 重启dnsmasq

    service dnsmasq restart

  2. 测试分流效果

  • 未使用本地dns解析
    dig google.com @223.5.5.5
  • 使用本地dns解析
    dig google.com @127.0.0.1
  1. 添加自定义域名到白名单
    echo 'server=/你需要的域名/223.5.5.5' >>/etc/dnsmasq.d/accelerated-domains.china.223.5.5.5.conf

    DDNS动态域名解析

    如果家里是公网IP,可以使用DDNS给域名绑定动态ip,no-ip是ddns解析服务,免费赠送域名无需备案,速度还不错,每个月需要点一次邮件续期,官网的ip更新方式在树莓派下更新失败,折腾一段时间后,发现用ddclient可以正常更新,但是注意如果当前状态是pptp开启的情况下,获取到的外网ip可能不是运营商的公网ip,在配置了智能路由的情况下需使用无需PPTP访问的网站获取外网ip
    1
    sudo apt-get install ddclient
    设置配置文件 /etc/ddclient.conf
    1
    2
    3
    4
    5
    6
    protocol=noip
    use=web, web=获取外网ip的网站
    server=dynupdate.no-ip.com
    login=用户名(邮箱)
    password='密码'
    你的域名