Advertisement
Guest User

Untitled

a guest
May 11th, 2019
1,714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.20 KB | None | 0 0
  1. $ cat  package/base-files/files/etc/hotplug.d/iface/98-pbridge.sh              
  2. WIF=$DEVICE
  3. LIF=br-lan
  4. IFCONFIG=/sbin/ifconfig
  5. ROUTE=/sbin/route
  6. IPTABLES=/usr/sbin/iptables
  7. TMP_DIR=/tmp/tmp_file
  8. TMP_PBRIDGE_IP="$TMP_DIR/pbridge_IP"
  9. FWT="$TMP_DIR/pbridge_firewall.sh"
  10. DNS_TC="$TMP_DIR/dnsmasq_pbridge.conf"
  11. mkdir -p "$TMP_DIR"
  12.  
  13. get_wan_section() {
  14.         NAME=`uci get network.wan.ifname`
  15.         SECTION="wan"
  16.         if [ "$NAME" == "3g-ppp" ]; then
  17.                 #3g-ppp gets its IP individually, it does not reflect in wan IP
  18.                 SECTION="ppp"
  19.         elif [ "$NAME" == "wwan0" ]; then
  20.                 SECTION="ppp_dhcp"
  21.         fi
  22.  
  23.         echo "$SECTION"
  24. }
  25.  
  26. get_new_address() {
  27.         local p=`uci -q get network.lan.ipaddr`
  28.  
  29.         temp=`echo $p|awk -F '.' '{print $1"."$2"."$3}'`
  30.         for i in `seq 245 254`; do
  31.                 addr="$temp.$i"
  32.                 ping temp -c1 -W1
  33.                 if [ "$?" -eq "1" ]; then
  34.                         break
  35.                 else
  36.                         continue
  37.                 fi
  38.         done
  39.         echo $addr
  40. }
  41.  
  42. EXTERNAL=
  43.  
  44. pseudo_bridge()
  45. {
  46.         . /lib/functions/network.sh
  47.         . /lib/teltonika-functions.sh
  48.         network_flush_cache
  49.         network_get_ipaddr WIP "$INTERFACE"
  50.         network_get_gateway WGW "$INTERFACE"
  51.         network_get_subnet SUBNET "$INTERFACE"
  52.         if [ -z "$WIP" -o -z "$WGW" -o -z "$SUBNET"  ]; then
  53.                 return 1
  54.         fi
  55.         OLDWIP=`cat $TMP_PBRIDGE_IP 2>/dev/null`
  56.  
  57.         echo "$WIP" >"$TMP_PBRIDGE_IP"
  58.         WNM=`ipcalc.sh $SUBNET | grep "NETMASK" | awk -F '=' '{print $2}'`
  59.         #/etc/init.d/dnsmasq stop
  60.  
  61.         LIP=`uci get network.lan.ipaddr`
  62.         LNM=`uci get network.lan.netmask`
  63.         PROTO=`uci get network.ppp.proto`
  64.  
  65.         echo "$IPTABLES -t nat -D zone_wan_postrouting -j MASQUERADE" > "$FWT"
  66.         echo "$IPTABLES -t nat -A zone_wan_postrouting -s $LIP/$LNM -o $WIF -j SNAT --to-source $WIP" >> "$FWT"
  67.         chmod +x "$FWT"
  68.  
  69.         $IFCONFIG $LIF:0 down
  70.         if [ "$OLDWIP" != "$WIP" ]; then
  71.                 ifup lan
  72.         fi
  73.         #       remove WAN IF IP
  74.  
  75.         # Laikinai isjungti interneto adapteri, kad sekmingai butu leasinamas IP adresas
  76.         $IFCONFIG $WIF `get_new_address` up
  77.  
  78.         #       replace default route to Gateway through WIF
  79.         $ROUTE add -host $WGW dev $WIF
  80.         $ROUTE add default gw $WGW dev $WIF
  81.         #       add route to WAN IP through LAN iface
  82.         $ROUTE add -host $WIP dev $LIF
  83.         # enable proxy_arp so can use WGW s gateway on LAN device
  84.         echo "1" >/proc/sys/net/ipv4/conf/$WIF/proxy_arp
  85.         echo "1" >/proc/sys/net/ipv4/conf/$LIF/proxy_arp
  86.         if [ $(get_vidpid_tlt) = "12D1:15C1" ]; then
  87.                 /sbin/arp -s $WGW 00:00:00:00:00:00
  88.         fi
  89.  
  90.         #       replace MASQ on WIF with SNAT
  91.         #iptables -F
  92.         #iptables -t nat -F
  93.         #iptables -t raw -F
  94.         #iptables -t mangle -F
  95.         #iptables -P FORWARD ACCEPT
  96.         #$IPTABLES -t nat -D zone_wan_postrouting -j MASQUERADE
  97.         #$IPTABLES -t nat -A zone_wan_postrouting -s $LIP/$LNM -o $WIF -j SNAT --to-source $WIP
  98.         #echo "$IPTABLES -t nat -D zone_wan_postrouting -j MASQUERADE" > "$FWT"
  99.         #echo "$IPTABLES -t nat -A zone_wan_postrouting -s $LIP/$LNM -o $WIF -j SNAT --to-source $WIP" >> "$FWT"
  100.         #chmod +x "$FWT"
  101.         #       add a bit of extra firewall
  102.         #$IPTABLES -t nat -I PREROUTING -i $WIF -d ! $WIP -j DROP
  103.         #       intercept HTTP port
  104.         #logger -t MANO "MANO=======$IPTABLES -t nat -A PREROUTING -i $WIF -p tcp --dport 80 -j DNAT --to $LIP"
  105.         #$IPTABLES -t nat -A PREROUTING -i $WIF -p tcp --dport 80 -j DNAT --to $LIP
  106.  
  107.         #       setup DHCP server
  108.         #       set WAN GW as secondary LAN IP for DHCP to work
  109.         #$IFCONFIG $LIF:0 $WGW netmask $WNM
  110.  
  111.  
  112.         passthrough_dhcp=`uci get -q network.ppp.passthrough_dhcp`
  113.         if [ "$passthrough_dhcp" != "no_dhcp" ]; then # nevykdom kai passthrough dhcp mode yra no DHCP
  114.                 if [ "$PROTO" == "3g" ]; then
  115.                         # Workaround
  116.                         new_WGW=`echo $WIP | awk -F '.' '{print $1"."$2"."$3}'`
  117.                         WNM="255.255.255.0"
  118.  
  119.                         if [ "$WGW" != "$new_WGW.1" ] && [ "$WIP" != "$new_WGW.1" ]; then
  120.                                 new_WGW="$new_WGW.1"
  121.                         elif [ "$WGW" != "$new_WGW.2" ] && [ "$WIP" != "$new_WGW.2" ]; then
  122.                                 new_WGW="$new_WGW.2"
  123.                         else
  124.                                 new_WGW="$new_WGW.3"
  125.                         fi
  126.                 else
  127.                         local still_not_found=0
  128.                         local new_WGW=`echo $WIP | awk -F '.' '{print $1"."$2"."$3}'`
  129.                         local END_GW=`echo $WGW | cut -d "." -f 4`
  130.                         NET_IP=`ipcalc.sh $WIP $WNM | grep "NETWORK" | awk -F '=' '{print $2}'`
  131.                         BCAST_IP=`ipcalc.sh $WIP $WNM | grep "BROADCAST" | awk -F '=' '{print $2}'`
  132.                         while [ "$WGW" == "$new_WGW.$END_GW" ] || [ "$WIP" == "$new_WGW.$END_GW" ] || [ "$NET_IP" == "$new_WGW.$END_GW" ]; do
  133.                                 if [ "$NET_IP" == "$new_WGW.$END_GW" ] && [ $still_not_found == 0 ]; then
  134.                                         END_GW=`echo $BCAST_IP | cut -d "." -f 4`
  135.                                         still_not_found=1
  136.                                 elif [ "$NET_IP" == "$new_WGW.$END_GW" ] && [ $still_not_found == 1 ]; then
  137.                                         local PREFIX=`ipcalc.sh $SUBNET | grep "PREFIX" | awk -F '=' '{print $2}'`
  138.                                         PREFIX=$((PREFIX-1))
  139.                                         SUBNET="$WIP/$PREFIX"
  140.                                         WNM=`ipcalc.sh $SUBNET | grep "NETMASK" | awk -F '=' '{print $2}'`
  141.                                         NET_IP=`ipcalc.sh $WIP $WNM | grep "NETWORK" | awk -F '=' '{print $2}'`
  142.                                         BCAST_IP=`ipcalc.sh $WIP $WNM | grep "BROADCAST" | awk -F '=' '{print $2}'`
  143.                                         END_GW=`echo $BCAST_IP | cut -d "." -f 4`
  144.                                 fi
  145.                                 END_GW=$((END_GW-1))
  146.                         done
  147.                         new_WGW="$new_WGW.$END_GW"
  148.                 fi
  149.  
  150.                 $IFCONFIG $LIF:0 $new_WGW netmask $WNM
  151.         fi
  152.  
  153.  
  154.         #       setup DHCP config
  155.  
  156.         #/etc/init.d/dnsmasq stop
  157.         #killall dnsmasq
  158.         #rm /tmp/dhcp.leases
  159.         #cp /var/etc/dnsmasq.conf "$DNS_TC"
  160.         #sed -i "/dhcp-range/d" "$DNS_TC"
  161.         rm -f "$DNS_TC"
  162.         #echo "dhcp-range=lan,$WIP,$WIP,$WNM,12h" >> "$DNS_TC"
  163.         #echo "dhcp-range=lan,192.168.1.160,192.168.1.200,255.255.255.0,12h" >> "$DNS_TC"
  164.         #echo "dhcp-range=lan,$WIP,$WIP,$WNM,12h" >> "$DNS_TC"
  165.         if [ "$passthrough_dhcp" != "no_dhcp" ]; then
  166.                 leasetime=`uci get -q network.ppp.leasetime`
  167.                 echo "dhcp-range=lan,$WIP,$WIP,$WNM,$leasetime" >> "$DNS_TC"
  168.  
  169.                 DMAC=`uci get -q network.ppp.mac`
  170.                 if [ "$DMAC" ]; then
  171.                         #echo "dhcp-host=$DMAC,192.168.1.151,24h" >> "$DNS_TC"
  172.                         echo "dhcp-host=$DMAC,$WIP,12h" >> "$DNS_TC"
  173.                 fi
  174.                 /etc/init.d/dnsmasq restart
  175.         fi
  176.         /etc/init.d/firewall reload
  177. }
  178.  
  179. if [ "$DEVICE" == "eth2" ] || [ "$DEVICE" == "3g-ppp" ] || [ "$DEVICE" == "wwan0" ]; then
  180.         ppp_method=`uci get -q network.ppp.method`
  181.         ppp_enabled=`uci get -q network.ppp.enabled`
  182.         if [ "$ppp_method" == "pbridge" ] && [ "$ppp_enabled" != "0" ]; then
  183.                 if [ "$ACTION" == "ifup" -o "$ACTION" == "ifupdate" ]; then
  184.                         #logger -t MANO "Darom"
  185.                         pseudo_bridge
  186.                         if [ "$ACTION" == "ifupdate" ]; then
  187.                                 $IFCONFIG $WIF `get_new_address` up
  188.                         fi
  189.                 elif [ "$ACTION" == "ifdown" ]; then
  190.                         $IFCONFIG $LIF:0 down
  191.                         rm -f "$DNS_TC"
  192.                 fi
  193.         fi
  194. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement