自建服务器前置代理机场节点

瓦工BIGGERBOX-20-1024

机场过墙,自建服务器前置代理冲浪。用shadowsocks-rust 代理机场节点,提高安全性及隐私保护。

距上次自建代理节点长期使用已经好几年了,期间一直用的机场。机场节点多,分流方便,流媒体等也能正常使用,还不用担心ip被封锁,除偶尔抽风外使用还是很舒适的。但是机场唯一的缺点就是同一节点使用的人太多,IP风险较高。

这次国外黑五趁优惠下手了一台落地机做前置代理,各方面都不错,为什么要用这种方法及选购代理服务器见推荐一款ip纯净的落地机,几天使用下来和直连GIA线路也差不多。

因为是前置代理,服务器只要求到港台地区延迟较低即可,由于已经通过机场梯子过墙了,也不需要TLS等防GFW封锁,所以这里使用了轻量、高效的shadowsocks-rust做前置代理。shadowsocks-rust是Shadowsocks的Rust语言实现,目前还在积极更新,它不仅具有传统Shadowsocks特性,而且还具有负载均衡 多个Shadowsocks服务器的能力,多线程运行,原生支持tcp、udp。

因为官方已经编译好了rust二进制文件,只要下载解压,写好配置文件就可以用了,无需编译安装。官方GitHub:https://github.com/shadowsocks/shadowsocks-rust

服务器使用debian12系统,只用来科学上网,未配备其他程序。

一、下载解压

运行下列文件:

apt install -y wget curl
mkdir -p /usr/local/bin/ss/
wget -qO- https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.21.2/shadowsocks-v1.21.2.x86_64-unknown-linux-gnu.tar.xz | tar -xJ -C /usr/local/bin/ss/
chmod +x /usr/local/bin/ss/*

二、配置文件

配置文件也比较简单,这里参考了 https://github.com/Shadowsocks-NET/shadowsocks-specs/blob/main/2022-4-shadowsocks-implementations.md 速度测试,2022-blake3-aes-128-gcm 加密方法是目前最快的加密方式,就选用该加密方式进行配置,使用该加密方式对密码有一定要求,需要是base64编码格式。我们可以用下列命令生成密码

# ss生成密码“ ”里面是对应ss2022的新一代加密方法
/usr/local/bin/ss/ssservice genkey -m "2022-blake3-aes-128-gcm"
# 如果已经安装了openssl,也可以用下列方法生成密码,16对应128 ,32对应256
# openssl rand -base64 16

把生成的密码记下来,放到下面的配置文件里,先本地记事本里临时保存一下,密码以 slSWkQDiPO/LLpsZN34iyQ== 为例,端口设为 9527 。 "server":"::" 监视ipv4及ipv6 。

{
"server":"::",
"mode":"tcp_and_udp",
"server_port":9527,
"password":"slSWkQDiPO/LLpsZN34iyQ==",
"timeout":600,
"method":"2022-blake3-aes-128-gcm",
}

写入配置文件

mkdir -p /etc/shadowsocks
nano /etc/shadowsocks/config.json

把刚才的配置文件写进去,ctrl+o 保存,ctrl+x退出。

三、开机自启

为了开机后自动启动,我们还需通过systemd服务启动shadowsocks。

nano /etc/systemd/system/shadowsocks.service

复制黏贴下面配置

[Unit]
Description=Shadowsocks Server
After=network.target

[Service]
ExecStart=/usr/local/bin/ss/ssserver -c /etc/shadowsocks/config.json

Restart=on-abort

[Install]
WantedBy=multi-user.target

ctrl+o 保存,ctrl+x退出。然后通过重载一下systemd服务启动

systemctl daemon-reload #Systemctl重载
systemctl start shadowsocks #启动
systemctl enable shadowsocks #添加开机自启动
systemctl status shadowsocks #查看状态

四、前置代理设置

我是通过openwrt路由器代理的,在路由器上做前置代理还是比较简单的。

1、Homeproxy(singbox)配置

Homeproxy做前置代理或链式代理比较简单,首先在 节点设置 处添加刚才我们自建的节点。

自建服务器前置代理机场节点

然后在 客户端设置 路由节点 处添加一个过墙节点 如upstream_HK,设为你所需要的机场节点。再增加一个前置代理节点 如 solid_node ,注意出站选为刚才设置的upstream_HK

自建服务器前置代理机场节点

设置好见图:

自建服务器前置代理机场节点

最后将路由设置处默认出站设为 solid_node 就好了,这是你就可以测试你搭建的节点有没有能科学上网了。这些都是基于我原来 使用Homeproxy科学上网分流目标网站 设置的。

2、ShadowSocksR Plus+ 设置

如果你使用的是SSRP,SSRP也是先在 服务器节点 处添加刚才我们自建的节点Solid。然后主服务器设为一个香港或其他地方的节点,Netflix分流服务器设为Solid节点,并选中分流服务器(前置)代理的勾就可以了。

自建服务器前置代理机场节点

五、防火墙设置(选做)

由于GFW对shadowsocks系列协议识别的比较好,如果通过国内IP访问极有可能该服务器会被封杀。我这里还写了个脚本只允许港台地区访问该服务器ss端口。

注意点:

1、由于debian12默认使用nftables,这里也使用nftables作为防火墙。

2、如果有其他业务需要注意目前的防火墙设置,是用的iptables还是nftables,如果使用iptables不适用下列脚本,自行修改。如果也用的nftables,需注意nftables的相关表名、链名、规则情况再行决定。

3、debian12防火墙默认是关闭的,没开启需要通过下列命令开启

systemctl start nftables
systemctl enable nftables

4、防火墙初始设置,如果服务器目前没有nftables规则( nft list ruleset 查看),可以用下列规则新建一个基础规则。ssh端口要改为你的ssh端口。下列规则不要一条一条输入,一次性全部复制黏贴到ssh里并执行。对于纯科学上网的服务器来说,默认规则无需太严格,链默认都为accept。

防火墙已经有各种规则的话不建议使用下列命令,以下适合纯粹用来翻墙的服务器且没有其他防火墙规则。清空防火墙设置的话直接 nft flush ruleset

# 创建 nftables 表
nft add table inet filter

# 创建链
nft add chain inet filter input { type filter hook input priority 0 \; policy accept \; }
nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }
nft add chain inet filter forward { type filter hook forward priority 0 \; policy accept \;}

# 设置规则
# 允许localhost流量
nft add rule inet filter input iif "lo" accept
nft add rule inet filter output oif lo accept
# 允许已建立和相关连接的流量
nft add rule inet filter input ct state established,related accept
# 无效的流量会drop,代理的话可能导致udp丢包
# nft add rule inet filter input ct state invalid drop
# 开放各端口
nft add rule inet filter input tcp dport 22 accept #ssh,你的ssh端口
# 允许ping(ICMP)
nft add rule inet filter input icmp type echo-request accept
# 禁止所有其他入站流量,开启会导致nat类型受限
# nft add rule inet filter input drop
# 保存规则
nft list ruleset > /etc/nftables.conf

下列是自定义的脚本,跟上述nftables防火墙规则对应,nftables主表名为filter,链名为input,在 input里跳转到ss_proxy_allowed链执行规则。

#!/bin/bash

# 变量定义
URL1="https://ispip.clang.cn/hk.txt"
URL2="https://ispip.clang.cn/tw.txt"
IPSET_NAME="allowed_ips"
SS_PORT=9527
SCRIPT_PATH=$(realpath "$0")

# 检查是否安装了 nftables 
if ! command -v nft >/dev/null 2>&1 ; then
    echo "需要安装 nftables "
    exit 1
fi

# 下载两个 IP 地址列表并合并
echo "正在下载并合并允许的IP地址列表..."
if ! curl -s "$URL1" -o /tmp/hk_ips.txt || ! curl -s "$URL2" -o /tmp/tw_ips.txt; then
    echo "下载IP地址列表失败,继续使用现有的IP地址列表..."
    # 如果没有旧文件,退出
    if [ ! -f /tmp/allowed_ips.txt ]; then
        echo "未找到现有的IP地址列表,无法继续。"
        exit 1
    fi
else
    # 合并两个文件,并去重
    cat /tmp/hk_ips.txt /tmp/tw_ips.txt | sort -u > /tmp/allowed_ips.txt
    echo "IP地址列表已成功合并并保存。"
fi

# 创建或刷新 nftset 集合
if nft list set inet filter "$IPSET_NAME" >/dev/null 2>&1; then
    echo "刷新现有的 IP 集合..."
    nft flush set inet filter "$IPSET_NAME"
else
    echo "创建新的 IP 集合..."
    nft add set inet filter "$IPSET_NAME" { type ipv4_addr\; flags interval\; auto-merge\; }
fi
# 添加 IP 地址到集合
elements=$(tr '\n' ',' < /tmp/allowed_ips.txt | sed 's/,$//')
if ! nft add element inet filter "$IPSET_NAME" { $elements }; then
    echo "添加 IP 地址到集合失败"
    exit 1
fi

# 检查并添加新的 nftables 规则
if ! nft list ruleset | grep -q "ss_proxy_allowed"; then
    echo "创建并配置新的常规链.."
    nft add chain inet filter ss_proxy_allowed 
    nft add rule inet filter ss_proxy_allowed ip saddr @allowed_ips tcp dport "$SS_PORT" counter accept
    nft add rule inet filter ss_proxy_allowed ip saddr @allowed_ips udp dport "$SS_PORT" counter accept
    nft add rule inet filter ss_proxy_allowed tcp dport "$SS_PORT" counter ct state new drop
    nft add rule inet filter ss_proxy_allowed udp dport "$SS_PORT" counter ct state new drop
    # 让基本链跳转到本链,需要靠前的话可以将add改为insert
    nft add rule inet filter input ip saddr @allowed_ips jump ss_proxy_allowed

else
    echo "规则链已存在,跳过创建。"
fi

# 保存 nftables 规则
echo "正在保存 nftables 配置..."
if ! nft list ruleset > /etc/nftables.conf; then
    echo "保存 nftables 配置失败,退出。"
    exit 1
fi

# 配置定时任务,确保每月1日1:58下载并更新 IP 地址列表
CRON_SCHEDULE="58 1 1 * *"
CRON_JOB="$CRON_SCHEDULE $SCRIPT_PATH"

# 检查是否已存在相同的 cron 任务
if crontab -l 2>/dev/null | grep -q "$SCRIPT_PATH"; then
    echo "定时任务已存在,跳过设置。"
else
    (crontab -l 2>/dev/null; echo "$CRON_JOB") | crontab -
    echo "已成功设置每月定时任务,自动更新 IP 地址列表并更新规则。"
fi

echo "屏蔽规则已配置完成!"

脚本保存为blockcn.sh文件,注意为linux格式,放到/root 文件夹里,然后执行

chmod +x /root/blockcn.sh
./blockcn.sh

这样你就完成了防火墙设置,nftables规则在/etc/nftables.conf里面,如果出现问题如访问不了等等,可到服务器后台vnc处登陆修改防火墙。清空防火墙设置的话直接 nft flush ruleset 即可。

防火墙方面设置有更新了,现在使用sing-box作为代理程序更方便,见 该文

只要买对前置服务器及很好的机场,你获得的体验将十分不错!

自建服务器前置代理机场节点

speedtest跑满我的带宽

自建服务器前置代理机场节点

youtube看4k速度不卡

技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/1976.html

(1)

BandWh.com 折腾之路●一起折腾

上一篇 2024年10月25日 15:32
下一篇 2024年12月18日 10:01
瓦工BIGGERBOX-20-1024

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请文明评论!

评论列表(4条)

  • addd
    addd 2025年1月4日 00:14

    homeproxy 链式代理按照你的配置还是走了直连,插件不支持?

    • BandWh.com
      BandWh.com 2025年1月4日 08:46

      @addd不应该啊,这样配置了访问国外网站要么不通,要么没问题,但不会走直连的。你仔细检查配置,默认出站什么的。先不配置链式代理,单独测试每个节点,没问题了再搞链式代理。SS易被检测,直连SS易导致服务器IP被封。

  • eueu
    eueu 2024年12月22日 04:37

    瞪眼很好奇作者搭这个网站是为了什么,看起来也没什么广告,纯粹是分享帮助吗。

    • BandWh.com
      BandWh.com 2024年12月22日 08:00

      @eueu个人爱好,记录一些自己碰到的问题,有google adsense赚点服务器钱。