| #!/bin/sh | 
 |  | 
 | path_sh=`nv get path_sh` | 
 | . $path_sh/global.sh | 
 | echo "Info: defwan_set.sh $1 start" >> $test_log | 
 | nd_dns=`nv get lan_ipaddr` | 
 | #linuxϵͳetcĿ¼¿É¶Áд£¬resolv.conf¿ÉÒÔÖ±½Ó·ÅÔÚetcÏ£¬Í¬²½uc´úÂëʱעÒâ²»Òª½«´Ë´¦Í¬²½ | 
 | resolv_conf=/etc/resolv.conf | 
 | dnsmasq_conf=$path_conf/dnsmasq.conf | 
 |  | 
 | killall -9 dnsmasq | 
 | def_cid=`nv get default_cid` | 
 |  | 
 | if [ "-$1" == "-pswan" ]; then | 
 |     ipaddr_type=`nv get "pdp_act_type"$def_cid` | 
 | elif [ "-$1" == "-ethwan" ]; then | 
 |     ipaddr_type=`nv get eth_act_type` | 
 | elif [ "-$1" == "-wifiwan" ]; then | 
 |     ipaddr_type=`nv get wifi_act_type` | 
 | fi | 
 |  | 
 | #»ñȡĬÈÏÍø¿Ú | 
 | wan_if=$defwan_if | 
 | wan6_if=$defwan6_if | 
 |  | 
 | echo "" > $dnsmasq_conf | 
 |  | 
 | #Èç¹û±¾µØÓ¦ÓÃÐèҪʹÓÃdnsmasqµÄ¹¦ÄÜ£¬ÐèÒªÔÚ"/etc/resolv.conf" ÎļþÖÐÌí¼Ó "127.0.0.1"£¬±ØÐë·ÅÔÚµÚÒ»Ìõ | 
 | echo "" > $resolv_conf | 
 | echo nameserver 127.0.0.1 > $resolv_conf | 
 |  | 
 |  | 
 | #DNS¶ÔÓÚÍ¬Ò»Íø¿Ú£¬²»Çå³þ½«À´ÐèÇóÊÇ·ñÖ§³Ö·Ö±ð¶Ôv4¡¢v6½øÐÐauto¡¢manualÉèÖ㬴˴¦ÔÝʱ×ö³É¿É·Ö±ðÉèÖà | 
 | #ÉèÖÃIPv4 ȱʡ·ÓÉ DNS | 
 | if [ "-$ipaddr_type" == "-IPv4" -o "-$ipaddr_type" == "-IPv4v6" -o "-$ipaddr_type" == "-IPV4V6" -o "-$ipaddr_type" == "-" ];then | 
 | 	#ÉèÖÃIPv4µÄĬÈÏÍø¹Ø | 
 | 	route del default | 
 | 	Flag=`ip route | grep -w "default"` | 
 | 	if [ "-$Flag" != "-" ];then | 
 | 	    echo "Error: route del default failed." >> $test_log | 
 | 	fi | 
 |  | 
 | 	defwan_gw=`nv get $wan_if"_gw"` | 
 | 	if [ "-$defwan_gw" != "-" -o "-$defwan_rel" != "-" ];then | 
 |         ip route add default via $defwan_gw dev $defwan_rel 2>>$test_log | 
 | 	    if [ $? -ne 0 ];then | 
 | 	        echo "Error: ip route add default via $defwan_gw dev $defwan_rel failed." >> $test_log | 
 | 	    fi | 
 | 	fi | 
 | 	 | 
 |    | 
 |  | 
 |      | 
 | 	#dnsmodeÓÉatserver´¦Àí£¬´«Êµ¼ÊʹÓõÄÖµ£¬´Ë´¦½öʹÓÃÒ»¸önv£¬²»Çø·Öauto manual | 
 | 	dns_mode=`nv get $1"_dns_mode"` | 
 | 	if [ "-$1" == "-pswan" -o "-$dns_mode" == "-auto" -o "-$dns_mode" == "-" ]; then | 
 | 	        pridns=`nv get $wan_if"_pridns"` | 
 | 		    secdns=`nv get $wan_if"_secdns"` | 
 | 	elif [ "-$dns_mode" == "-manual" ]; then	 | 
 | 		pridns=`nv get $1"_pridns_manual"` | 
 | 		secdns=`nv get $1"_secdns_manual"` | 
 | 	fi | 
 | 	 | 
 | 	if [ "-$pridns" == "-" -o "-$pridns" == "-0.0.0.0" ] && [ "-$secdns" == "-" -o "-$secdns" == "-0.0.0.0" ]; then | 
 | 		pridns="114.114.114.114" | 
 | 		secdns="8.8.8.8" | 
 | 	fi | 
 | 	 | 
 | 	if [ "-$pridns" != "-" -a "-$pridns" != "-0.0.0.0" ]; then | 
 | 		echo nameserver $pridns > $dnsmasq_conf | 
 | 	fi | 
 | 	if [ "-$secdns" != "-" -a "-$secdns" != "-0.0.0.0" ]; then | 
 | 		echo nameserver $secdns >> $dnsmasq_conf | 
 | 	fi | 
 | 		 | 
 | 	dns_extern=`nv get dns_extern` | 
 | 	if [ -n "$dns_extern" ]; then | 
 | 		echo nameserver $dns_extern >> $dnsmasq_conf | 
 | 	fi | 
 | 	if [ "-$1" == "-pswan" ]; then | 
 | 		tc_tbf.sh up $def_cid | 
 | 	fi | 
 | fi | 
 |  | 
 | #ÒÑÉèÖúÃÍâÍø¿ÚÔò¿ª×ª·¢ | 
 | if [ "-$wan_if" != "-" ]; then | 
 | 	echo 1 > /proc/sys/net/ipv4/ip_forward | 
 | fi | 
 |  | 
 | #ÉèÖÃIPv6 DNS | 
 | if [ "-$ipaddr_type" == "-IPv6" -o "-$ipaddr_type" == "-IPV6" -o "-$ipaddr_type" == "-IPv4v6" -o "-$ipaddr_type" == "-IPV4V6" ];then | 
 | 	#dnsmodeÓÉatserver´¦Àí£¬´«Êµ¼ÊʹÓõÄÖµ£¬´Ë´¦½öʹÓÃÒ»¸önv£¬²»Çø·Öauto manual | 
 | 	ipv6_dns_mode=`nv get $1"_ipv6_dns_mode"` | 
 | 	if [ "-$1" == "-pswan" -o "-$ipv6_dns_mode" == "-auto" -o "-$ipv6_dns_mode" == "-" ]; then | 
 | 	    ipv6_pridns=`nv get $wan6_if"_ipv6_pridns_auto"` | 
 |         ipv6_secdns=`nv get $wan6_if"_ipv6_secdns_auto"` | 
 | 	elif [ "-$ipv6_dns_mode" == "-manual" ]; then	 | 
 |             ipv6_pridns=`nv get $1"_ipv6_pridns_manual"` | 
 |             ipv6_secdns=`nv get $1"_ipv6_secdns_manual"` | 
 | 	fi | 
 |      | 
 |     nv set $wan6_if"_radvd_ipv6_dns_servers"=$ipv6_pridns,$ipv6_secdns | 
 | 	 | 
 |     if [ -n "$ipv6_pridns" ] && [ "$ipv6_pridns" != "::" ] && [ "$ipv6_pridns" != "::0" ] && [ "$ipv6_pridns" != "0000:0000:0000:0000:0000:0000:0000:0000" ];then | 
 |         echo nameserver $ipv6_pridns >> $dnsmasq_conf | 
 |     fi | 
 |              | 
 |     if [ -n "$ipv6_secdns" ] && [ "$ipv6_secdns" != "::" ] && [ "$ipv6_secdns" != "::0" ] && [ "$ipv6_secdns" != "0000:0000:0000:0000:0000:0000:0000:0000" ];then | 
 |         echo nameserver $ipv6_secdns >> $dnsmasq_conf | 
 |     fi | 
 | 		 | 
 | 	ipv6_dns_extern=`nv get ipv6_dns_extern` | 
 | 	if [ -n "$ipv6_dns_extern" ]; then | 
 | 		echo nameserver $ipv6_dns_extern >> $dnsmasq_conf | 
 | 	fi	 | 
 |     if [ "-$1" == "-pswan" ]; then | 
 | 		tc_tbf.sh up $def_cid | 
 | 	fi | 
 | fi | 
 |  | 
 | nv set $wan6_if"_radvd_ipv6_dns_servers"=$ipv6_pridns,$ipv6_secdns | 
 |  | 
 | #ÉèÖøøÒ³ÃæÏÔʾµ±Ç°ÍâÍøIPµØÖ· | 
 | #ÉèÖÃIPv4Ò³ÃæÏÔʾµØÖ· | 
 | if [ "-$ipaddr_type" == "-IPv4" -o "-$ipaddr_type" == "-IPV4" -o "-$ipaddr_type" == "-IPv4v6" -o "-$ipaddr_type" == "-IPV4V6" -o "-$ipaddr_type" == "-" ]; then | 
 |     wan4_ip=`nv get $wan_if"_ip"` | 
 |     nv set wan_ipaddr="$wan4_ip" | 
 | fi | 
 |  | 
 | #ÉèÖÃIPv6Ò³ÃæÏÔʾµØÖ· | 
 | if [ "-$ipaddr_type" == "-IPv6" -o "-$ipaddr_type" == "-IPV6" -o "-$ipaddr_type" == "-IPv4v6" -o "-$ipaddr_type" == "-IPV4V6" ]; then | 
 |     wan6_ip=`nv get $wan6_if"_ipv6_ip"` | 
 |     nv set ipv6_wan_ipaddr="$wan6_ip" | 
 | fi | 
 |  | 
 | dnsmasq -i $lan_if -r $dnsmasq_conf & | 
 |  | 
 | # ppp0ÐèÒªÉèÖÃMSS×Ϊ1440£¬·ñÔò¿ÉÄÜtcp²»Í¨ | 
 | if [ "$defwan_rel" == "ppp0"  ]; then | 
 |     echo "Info: dns_set ppp0 set MSS 1440" >> $test_log | 
 |     iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1440 | 
 | fi | 
 |  | 
 |  |