Spaces:
Paused
Paused
| # 确保在任何命令失败时立即退出 | |
| 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 "$@" |