#!/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 "$@"