Advertisement
Guest User

Untitled

a guest
Sep 18th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.40 KB | None | 0 0
  1. #! /bin/bash
  2. function log() {
  3.     echo "$@"
  4.     "$@"
  5. }
  6.  
  7. bridge="br0"
  8. tap="$1"
  9. net="$(echo "${tap}" | sed -re 's:[^0-9]+::g')"
  10.  
  11. case "$0" in
  12.     *.ifup.sh)
  13.         action="up"
  14.         ;;
  15.     *.ifdown.sh)
  16.         action="down"
  17.         ;;
  18. esac
  19.  
  20. if [ "${action}" = "up" ]
  21. then
  22.     log ifconfig "${tap}" "10.0.${net}.1" up netmask 255.255.255.0
  23.  
  24.     if [ "$(cat /proc/sys/net/ipv4/ip_forward)" != "1" ]
  25.     then
  26.         echo "echo 1 > /proc/sys/net/ipv4/ip_forward"
  27.               echo 1 > /proc/sys/net/ipv4/ip_forward
  28.     fi
  29. fi
  30.  
  31. iptables -L -v | awk '
  32.  BEGIN {
  33.    n = 0
  34.  }
  35.  /^Chain FORWARD/,/^$/ {
  36.    if (match($0, /^  /)) {
  37.      n ++
  38.      if ($6 == "'$tap'" || $7 == "'$tap'") {
  39.        print n
  40.      }
  41.    }
  42.  }
  43. ' | tac | while read num
  44. do
  45.     log iptables -D FORWARD "${num}"
  46. done
  47.  
  48. iptables -t nat -L -v | awk '
  49.  BEGIN {
  50.    n = 0
  51.  }
  52.  /^Chain POSTROUTING/,/^$/ {
  53.    if (match($0, /^  /)) {
  54.      n ++
  55.      if ($3 == "MASQUERADE" && $7 == "'$bridge'") {
  56.        print n
  57.      }
  58.    }
  59.  }
  60. ' | tac | while read num
  61. do
  62.     log iptables -t nat -D POSTROUTING "${num}"
  63. done
  64.  
  65. if [ "${action}" = "up" ]
  66. then
  67.     log iptables -t nat -A POSTROUTING -o "${bridge}" -j MASQUERADE
  68.  
  69.     log iptables -I FORWARD 1 -i "${tap}" -j ACCEPT
  70.     log iptables -I FORWARD 1 -o "${tap}" -m state --state RELATED,ESTABLISHED -j ACCEPT
  71. else
  72.     log ifconfig "${tap}" down
  73. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement