距上次自建代理节点长期使用已经好几年了,期间一直用的机场。机场节点多,分流方便,流媒体等也能正常使用,还不用担心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
评论列表(4条)
homeproxy 链式代理按照你的配置还是走了直连,插件不支持?
@addd:不应该啊,这样配置了访问国外网站要么不通,要么没问题,但不会走直连的。你仔细检查配置,默认出站什么的。先不配置链式代理,单独测试每个节点,没问题了再搞链式代理。SS易被检测,直连SS易导致服务器IP被封。
很好奇作者搭这个网站是为了什么,看起来也没什么广告,纯粹是分享帮助吗。
@eueu:个人爱好,记录一些自己碰到的问题,有google adsense赚点服务器钱。