From 51fd6f489fede801a8d420a8aca7117c880c35a2 Mon Sep 17 00:00:00 2001 From: dnomd343 Date: Sun, 26 Sep 2021 11:31:27 +0800 Subject: [PATCH] feat: add ipv6 RA support --- Dockerfile | 3 +- load.sh | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 20be078..93c98cd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,8 @@ COPY ["./load.sh", "./tproxy.sh", "/etc/xray/"] COPY --from=asset /tmp/asset/ /etc/xray/asset/ COPY --from=asset /tmp/xray/xray /usr/bin/ ENV XRAY_LOCATION_ASSET=/etc/xray/asset -RUN apk --update add --no-cache iptables ip6tables && \ +RUN apk --update add --no-cache iptables ip6tables radvd && \ mkdir -p /etc/xray/config && \ + mkdir -p /run/radvd/ && \ mv /etc/xray/tproxy.sh / CMD ["sh","/tproxy.sh"] diff --git a/load.sh b/load.sh index 9da7b20..d02f4c7 100755 --- a/load.sh +++ b/load.sh @@ -251,6 +251,72 @@ if [ -n "$ipv6_forward" ]; then fi } +load_radvd_conf(){ +cat>$NETWORK_DIR/radvd/config< $RADVD_CONF +[ -n "$AdvSendAdvert" ] && echo " AdvSendAdvert $AdvSendAdvert;" >> $RADVD_CONF +[ -n "$AdvManagedFlag" ] && echo " AdvManagedFlag $AdvManagedFlag;" >> $RADVD_CONF +[ -n "$AdvOtherConfigFlag" ] && echo " AdvOtherConfigFlag $AdvOtherConfigFlag;" >> $RADVD_CONF +[ -n "$MinRtrAdvInterval" ] && echo " MinRtrAdvInterval $MinRtrAdvInterval;" >> $RADVD_CONF +[ -n "$MaxRtrAdvInterval" ] && echo " MaxRtrAdvInterval $MaxRtrAdvInterval;" >> $RADVD_CONF +[ -n "$MinDelayBetweenRAs" ] && echo " MinDelayBetweenRAs $MinDelayBetweenRAs;" >> $RADVD_CONF +if [ -n "$ipv6_address" ]; then + echo " prefix $ipv6_address {" >> $RADVD_CONF + [ -n "$AdvOnLink" ] && echo " AdvOnLink $AdvOnLink;" >> $RADVD_CONF + [ -n "$AdvAutonomous" ] && echo " AdvAutonomous $AdvAutonomous;" >> $RADVD_CONF + [ -n "$AdvRouterAddr" ] && echo " AdvRouterAddr $AdvRouterAddr;" >> $RADVD_CONF + [ -n "$AdvValidLifetime" ] && echo " AdvValidLifetime $AdvValidLifetime;" >> $RADVD_CONF + [ -n "$AdvPreferredLifetime" ] && echo " AdvPreferredLifetime $AdvPreferredLifetime;" >> $RADVD_CONF + echo " };" >> $RADVD_CONF +fi +echo "};" >> $RADVD_CONF +radvd -C $RADVD_CONF +} + mkdir -p $LOG_DIR mkdir -p $ASSET_DIR mkdir -p $CONFIG_DIR @@ -268,12 +334,20 @@ cp $CONFIG_DIR/*.json $XRAY_DIR/config/ [ ! -s "$ASSET_DIR/update.sh" ] && load_asset_update cp $ASSET_DIR/*.dat $XRAY_DIR/asset/ +mkdir -p $NETWORK_DIR/radvd mkdir -p $NETWORK_DIR/bypass mkdir -p $NETWORK_DIR/interface [ -s "$NETWORK_DIR/dns" ] && init_dns [ ! -f "$NETWORK_DIR/bypass/ipv4" ] && load_bypass_ipv4 [ ! -f "$NETWORK_DIR/bypass/ipv6" ] && load_bypass_ipv6 -[ -f "$NETWORK_DIR/interface/ignore" ] && exit -[ ! -s "$NETWORK_DIR/interface/ipv4" ] && load_network_ipv4 -[ ! -s "$NETWORK_DIR/interface/ipv6" ] && load_network_ipv6 -init_network + +if [ ! -f "$NETWORK_DIR/interface/ignore" ]; then + [ ! -s "$NETWORK_DIR/interface/ipv4" ] && load_network_ipv4 + [ ! -s "$NETWORK_DIR/interface/ipv6" ] && load_network_ipv6 + init_network +fi + +if [ ! -f "$NETWORK_DIR/radvd/ignore" ]; then + [ ! -s "$NETWORK_DIR/radvd/config" ] && load_radvd_conf + init_radvd +fi