Tag: Debian 10

  • 使用 Debian 10 搭建旁路代理网关/透明代理

    使用 Debian 10 搭建旁路代理网关

    上篇介绍过我曾经用 Proxmox VE 搭建过 OpenWRT 旁路由,但是由于某些众所周知的原因,在这个 OpenWRT 系统上跑 Shadowsocks 服务的 3 台 Bandwagon 服务器的 IP 同时被x了,这也太巧了吧!从此对 OpenWRT 搭建旁路由有心理阴影了,因为我没有理由不怀疑来路不明的 OpenWRT 固件或者 shadowsocks-libev-ss-server 插件有问题,并不是 OpenWRT 不靠谱,都怪我自己不会编译。

    不用 OpenWRT 搭建旁路由,难道就没办法方便的上网了吗?当然不是,我们可以用 Debian 10 Linux 系统搭建一个旁路由,准确的说,这个叫透明网关或者透明代理。其实我很早就看到别人的教程了,迟迟没有动手的原因是 macOS 下我用 ClashX ,Windows 下用 v2rayN ,iOS 下用 Quantamult X 就可以方便的上网。

    唯独在 Android 下,我的网络环境 Shadowsocks 几乎不可用了,被干扰的很厉害,又苦于找不到好用的 v2ray 客户端 。前几天看到有人分享 Clash for Android 横空出世了,原文提到的下载方式包括 Telegram 群组和 Google Play ,Telegram 我不用,又访问不到 Google Play 这才打算折腾一个透明代理。现在才知道,这个项目原来叫 ClashA ,早就可以方便的下载所有开发版。

    搭建一个基于 Debian 10 的透明网关、透明代理非常简单:安装 Debian 10 ,安装 Clash ,配置 Clash ,使用 iptables 转发流量。

    安装 Debian 10

    前几天用 unRAID 搭建了个简单的家庭服务器,unRAID 支持虚拟机,支持 CPU 和网卡直通,可以让虚拟机获得更好的性能,安装 Debian 10 的过程我这里就不说了。

    给 Debian 10 设置静态 IP 地址

    因为我们用 Debian 10 搭建网关设备,所以不能用 DHCP 分配 IP 地址,最好设置一个静态 IP

    sudo nano /etc/network/interfaces

    接下来参考我的配置,为 enp1so 这个网卡设置一个静态 IP 地址:

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    source /etc/network/interfaces.d/*
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    allow-hotplug enp1s0
    iface enp1s0 inet static
      address 192.168.2.10
      netmask 255.255.255.0
      gateway 192.168.2.1
      dns-nameservers 192.168.2.1 223.5.5.5 223.6.6.6
    
    # This is an autoconfigured IPv6 interface
    iface enp1s0 inet6 auto

    接着执行 sudo shutdown -r now 重启一下系统就可以了。

    安装 Clash

    Clash 是一个开源的,类似 Surge 的代理软件,支持本地 HTTP/HTTPS/SOCKS 代理,GeoIP 分流,自定义代理规则等等。

    cd ~
    wget https://github.com/Dreamacro/clash/releases/download/v0.17.1/clash-linux-amd64-v0.17.1.gz #下载最新版本
    gzip -d clash-linux-amd64-v0.17.1.gz #解压
    sudo mv clash-linux-amd64-v0.17.1 /usr/local/bin/clash #移动到 /usr/local/bin 目录,并且重命名为 Clash
    sudo chmod +x /usr/local/bin/clash #添加可执行权限

    执行 clash -v 命令看是否安装成功

    pengjiayou@debian:~$ clash -v
    Clash v0.17.1 linux amd64 Wed Jan  1 10:31:59 UTC 2020

    返回以上内容说明安装成功。接下来我们编写一个 Systemd 服务脚本,在 /lib/systemd/system/ 目录下创建 [email protected] 文件:

    sudo nano /lib/systemd/system/[email protected]

    写入以下内容(别修改)然后保存:

    [Unit]
    Description=A rule based proxy in Go for %i.
    After=network.target
    
    [Service]
    Type=simple
    User=%i
    Restart=on-abort
    ExecStart=/usr/local/bin/clash
    
    [Install]
    WantedBy=multi-user.target

    重新加载 systemd 模块

    sudo systemctl daemon-reload

    设置 Clash 开机自启动

    sudo systemctl enable clash@user

    user 是你当前 Debian 系统的用户名,比如 sudo systemctl enable clash@pengjiayou

    简单配置 Clash (添加 Clash 配置文件)

    Clash 的默认配置文件所在的目录是 $HOME/.config/clash ,配置文件的名称是 config.yml

    mkdir ~/.config/ #在 $HOME 下创建 .config 目录
    cd ~/.config/ #进入 .config 目录
    mkdir clash #在 .config 目录创建 clash 目录
    cd clash #进入 clash 目录
    touch config.yaml #创建 config.yaml 文件
    wget https://github.com/haishanh/yacd/archive/gh-pages.zip #yacd 是一个 Clash 的 web 前端
    unzip gh-pages.zip #解压 gh-pages.zip
    mv yacd-gh-pages/ dashboard/ #重命名为 dashboard 目录

    编辑 config.yaml 文件

    nano ~/.config/clash/config.yaml

    在 config.yaml 文件中加入如下内容:

    port: 7890
    socks-port: 7891
    redir-port: 7892
    allow-lan: true
    mode: Rule
    log-level: info
    external-controller: 0.0.0.0:9090
    secret: ""
    external-ui: dashboard
    #此处内容请安装一个gui版本的clash然后在里面配置好代理然后抄过来
    Proxy: 
    Proxy Group:
    #
    Rule:
    - IP-CIDR,127.0.0.0/8,DIRECT
    - IP-CIDR,192.168.0.0/16,DIRECT
    - FINAL,Proxy

    这是 Clash 配置的简化版本,你可以参考这个文件的分流规则。接下来执行:

    sudo systemctl start clash@user

    如上所述,把 user 换成你当前 Debian 系统的用户名来启动 Clash

    Clash 的 YACD web 面板

    现在就有一个可以使用的局域网 http 或者 socks5 代理服务器了,甚至可以在浏览器里面访问 http://serverip:9090/ui/ 来调试 Clash!如果是公网的话我推荐 secret 处加上密码以保证安全性。

    为 Samsung S10e One UI 2 的 WIFI SSID 设置一个 http 代理

    为 Samsung S10e One UI 2 的 WIFI SSID 设置一个 http 代理就可以愉快的上网了。

    到这一步其实大部分需求都能满足了:在电脑上,不管是 macOS 10.15 或者 Windows 10 你可以设置 http 或者 socks5 系统代理;或者在浏览器插件 SwitchyOmega 上,或者 Dropbox 等软件设置代理服务器就可以上网了。

    如果你要为你的 wifi 路由器设置一个透明网关或者叫代理,就像别人的单网口旁路由教程提到的那样,请继续观看本文其它内容。

    高级配置 Clash (开启 redir-port 也就是透明代理端口)

    1. 做透明代理,必须启用redir-port,也就是clash透明代理的端口。

    2.做网关设备,你就必须得让其他局域网的机器能够连接到clash,所以allow-lan必须打开。

    3.必须打开clash的DNS功能,并且使用redir-host模式,最重要的是你还需要在fallback:后面加上一个支持DoT的DNS。比如我这边是使用的dns.rubyfish.cn:853,如果你用普通的DNS无非解决域名被污染的问题。

    修改 Clash 配置文件如下:

    dns:
      enable: true
      listen: 0.0.0.0:53
      enhanced-mode: redir-host
      nameserver:
        - 'tls://dns.rubyfish.cn:853'
      fallback:
        - 'tls://1.1.1.1:853'
        - 'tcp://1.1.1.1:53'
        - 'tcp://208.67.222.222:443'
        - 'tls://dns.google'

    这里还是 Clash 配置的简化版本,你可以参考这个文件的分流规则。

    为 Debian 10 系统开启 IP 转发

    要让 Debian 10 能够有一个基本的路由功能很简单,开一下 IP 转发就行:

    sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
    sudo echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf && sysctl -p

    验证一下,回显是1说明转发开启成功:

    cat /proc/sys/net/ipv4/ip_forward

    配置 iptables 转发

    配置文件弄好了之后,现在我们需要把机器所有的流量都转发到clash的透明代理端口上面,当然192.168.0.0这个网段的流量我们不做转发:

    iptables -t nat -N clash
    iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A clash -p tcp -j RETURN -m mark --mark 0xff
    iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892
    iptables -t nat -A PREROUTING -p tcp -j clash

    永久保存iptables规则:

    sudo apt install iptables-persistent netfilter-persistent
    netfilter-persistent save
    netfilter-persistent start
    iptables-save  > /etc/iptables/rules.v4

    透明代理至此终于搭建好了

    接下来就可以把旁路网关地址以及 dns 设置在需要的路由器,或者电脑上愉快的上网了。其实我没走到这一步,我到刚刚搭建好了一个局域网的 http / socks5 代理那一步就结束了,因为已经满足我的需求了,如果有问题,请参考如下资料: