notion / entrypoint.sh
clash-linux's picture
Upload 18 files
c058c1e verified
#!/bin/sh
# 确保在任何命令失败时立即退出
set -e
# --- 启动 redsocks ---
# 在后台启动redsocks,并使用我们创建的配置文件
echo "[Entrypoint] Starting redsocks..."
redsocks -c /etc/redsocks.conf &
# 等待片刻以确保redsocks服务已启动
sleep 2
# --- 配置 iptables ---
echo "[Entrypoint] Configuring iptables..."
# 您的代理服务器IP,我们需要避免将发往代理本身的流量再次重定向,防止死循环
PROXY_IP="34.55.224.190"
# 创建一个新的iptables链,专门用于处理我们的重定向逻辑
iptables -t nat -N REDSOCKS
# 规则1: 不重定向发往代理服务器本身的流量
iptables -t nat -A REDSOCKS -d $PROXY_IP -j RETURN
# 规则2: 不重定向发往本地网络和私有网络的流量
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
# 规则3: 将所有其他TCP流量重定向到redsocks监听的端口 (12345)
# 注意:我们重定向所有TCP流量,因为chrome_proxy_server可能连接任何端口,但主要是443
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
# 规则4: 将OUTPUT链(容器内进程发出的流量)应用我们的REDSOCKS规则
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
echo "[Entrypoint] iptables configured."
# --- 运行主程序 ---
# 使用 gosu 切换到非root用户 'node' 来运行应用程序
# 这是一种安全最佳实践,避免您的应用以root权限运行
# $@ 会将 Dockerfile 中 CMD 定义的命令(即 "npm start")作为参数传递给这里
echo "[Entrypoint] Starting application as user 'node'..."
exec gosu node "$@"