Redsocks:修订间差异
无编辑摘要 标签:2017年版源代码编辑 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
= | <syntaxhighlight lang="text"> | ||
## 2. 安装依赖 | |||
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install -y redsocks iptables | sudo apt-get install -y redsocks iptables | ||
检查安装结果: | 检查安装结果: | ||
/usr/sbin/redsocks -v | /usr/sbin/redsocks -v | ||
iptables --version | iptables --version | ||
系统软件包自带一个 | 系统软件包自带一个 redsocks.service,自定义服务不能和它同时管理 redsocks: | ||
sudo systemctl disable --now redsocks.service | sudo systemctl disable --now redsocks.service | ||
## 3. 创建代理管理脚本 | |||
创建目录: | |||
sudo install -d -o root -g root -m 0755 /opt/netproxy | sudo install -d -o root -g root -m 0755 /opt/netproxy | ||
sudoedit /opt/netproxy/netproxy.sh | sudoedit /opt/netproxy/netproxy.sh | ||
写入以下完整内容: | 写入以下完整内容: | ||
#!/usr/bin/env bash | #!/usr/bin/env bash | ||
set -euo pipefail | set -euo pipefail | ||
| 第195行: | 第84行: | ||
write_redsocks_conf() { | write_redsocks_conf() { | ||
cat >"${REDSOCKS_CONF}" | cat >"${REDSOCKS_CONF}" <<EOF | ||
base { | base { | ||
log_info = on; | log_info = on; | ||
| 第236行: | 第125行: | ||
iptables_restore() { | iptables_restore() { | ||
[[ -f "${IPTABLES_BACKUP}" ]] || return 1 | [[ -f "${IPTABLES_BACKUP}" ]] || return 1 | ||
iptables-restore | iptables-restore <"${IPTABLES_BACKUP}" | ||
} | } | ||
| 第373行: | 第262行: | ||
;; | ;; | ||
esac | esac | ||
设置权限: | |||
sudo chown root:root /opt/netproxy/netproxy.sh | sudo chown root:root /opt/netproxy/netproxy.sh | ||
sudo chmod 0755 /opt/netproxy/netproxy.sh | sudo chmod 0755 /opt/netproxy/netproxy.sh | ||
检查语法: | |||
bash -n /opt/netproxy/netproxy.sh | bash -n /opt/netproxy/netproxy.sh | ||
## 4. 可选:配置直连网段 | |||
当前脚本除回环地址和上游代理外,会代理所有本机 IPv4 TCP 流量,包括内网地址。 | 当前脚本除回环地址和上游代理外,会代理所有本机 IPv4 TCP 流量,包括内网地址。 | ||
如果需要保持管理网段直连,在 | 如果需要保持管理网段直连,在 iptables_apply() 中、“上游 SOCKS5 服务器必须直连”规则之后加入: | ||
iptables -t nat -A "${CHAIN}" \ | iptables -t nat -A "${CHAIN}" \ | ||
-d 192.168.220.0/24 -j RETURN | -d 192.168.220.0/24 -j RETURN | ||
也可以按实际环境放行其他网段: | |||
iptables -t nat -A "${CHAIN}" -d 10.0.0.0/8 -j RETURN | iptables -t nat -A "${CHAIN}" -d 10.0.0.0/8 -j RETURN | ||
iptables -t nat -A "${CHAIN}" -d 172.16.0.0/12 -j RETURN | iptables -t nat -A "${CHAIN}" -d 172.16.0.0/12 -j RETURN | ||
iptables -t nat -A "${CHAIN}" -d 192.168.0.0/16 -j RETURN | iptables -t nat -A "${CHAIN}" -d 192.168.0.0/16 -j RETURN | ||
如果内网业务本来就需要通过 | 如果内网业务本来就需要通过 SOCKS5,则不要添加这些规则。 | ||
## 5. 创建 systemd 服务 | |||
sudoedit /etc/systemd/system/proxy.service | sudoedit /etc/systemd/system/proxy.service | ||
写入: | |||
[Unit] | [Unit] | ||
Description=Proxy Service (Redsocks) | Description=Proxy Service (Redsocks) | ||
| 第439行: | 第312行: | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
设置权限并检查: | |||
sudo chown root:root /etc/systemd/system/proxy.service | sudo chown root:root /etc/systemd/system/proxy.service | ||
sudo chmod 0644 /etc/systemd/system/proxy.service | sudo chmod 0644 /etc/systemd/system/proxy.service | ||
sudo systemd-analyze verify /etc/systemd/system/proxy.service | sudo systemd-analyze verify /etc/systemd/system/proxy.service | ||
## 6. 加载并启动服务 | |||
> 执行后会立即接管本机 TCP 流量。 | |||
sudo systemctl daemon-reload | sudo systemctl daemon-reload | ||
sudo systemctl enable --now proxy.service | sudo systemctl enable --now proxy.service | ||
检查服务: | |||
systemctl is-enabled proxy.service | systemctl is-enabled proxy.service | ||
systemctl is-active proxy.service | systemctl is-active proxy.service | ||
systemctl status proxy.service --no-pager | systemctl status proxy.service --no-pager | ||
预期分别看到: | |||
enabled | enabled | ||
active | active | ||
## 7. 验证部署结果 | |||
检查 redsocks 和规则: | |||
sudo /opt/netproxy/netproxy.sh status | sudo /opt/netproxy/netproxy.sh status | ||
检查监听端口: | |||
sudo ss -ltnp 'sport = :12345' | sudo ss -ltnp 'sport = :12345' | ||
预期监听: | |||
127.0.0.1:12345 | 127.0.0.1:12345 | ||
检查完整规则顺序: | |||
sudo iptables -t nat -S OUTPUT | sudo iptables -t nat -S OUTPUT | ||
sudo iptables -t nat -S NETPROXY | sudo iptables -t nat -S NETPROXY | ||
sudo iptables -t mangle -S OUTPUT | sudo iptables -t mangle -S OUTPUT | ||
查看运行日志: | |||
sudo journalctl -u proxy.service -n 100 --no-pager | sudo journalctl -u proxy.service -n 100 --no-pager | ||
持续观察: | |||
sudo journalctl -u proxy.service -f | sudo journalctl -u proxy.service -f | ||
进行 TCP 测试: | |||
curl --connect-timeout 5 --max-time 15 -I https://example.com | curl --connect-timeout 5 --max-time 15 -I https://example.com | ||
注意:UDP、IPv6、ICMP 和经过本机转发的流量不会被该方案代理。 | |||
## 8. 修改上游代理 | |||
编辑服务文件: | 编辑服务文件: | ||
sudoedit /etc/systemd/system/proxy.service | sudoedit /etc/systemd/system/proxy.service | ||
修改: | |||
ExecStart=/opt/netproxy/netproxy.sh start 10.8.30.135:10810 | ExecStart=/opt/netproxy/netproxy.sh start 10.8.30.135:10810 | ||
然后重新加载并重启: | |||
sudo systemctl daemon-reload | sudo systemctl daemon-reload | ||
sudo systemctl restart proxy.service | sudo systemctl restart proxy.service | ||
sudo /opt/netproxy/netproxy.sh status | sudo /opt/netproxy/netproxy.sh status | ||
## 9. 停止与取消开机启动 | |||
sudo systemctl disable --now proxy.service | sudo systemctl disable --now proxy.service | ||
确认规则已清理或恢复: | |||
sudo iptables -t nat -S | grep NETPROXY || true | sudo iptables -t nat -S | grep NETPROXY || true | ||
sudo iptables -t mangle -S | grep 12345 || true | sudo iptables -t mangle -S | grep 12345 || true | ||
pgrep -a -x redsocks || true | pgrep -a -x redsocks || true | ||
需要注意:这个部署版本停止时会恢复启动前保存的整份 iptables 快照。如果服务运行期间其他程序修改过防火墙,停止服务可能覆盖那些修改。生 | |||
产环境建议后续改成“只删除 NETPROXY 自己的规则”,避免全量恢复。 | |||
</syntaxhighlight> | |||