Annotation of embedaddon/dnsmasq/contrib/port-forward/dnsmasq-portforward, revision 1.1
1.1 ! misho 1: #!/bin/bash
! 2: #
! 3: # /usr/sbin/dnsmasq-portforward
! 4: #
! 5: # A script which gets run when the dnsmasq DHCP lease database changes.
! 6: # It logs to $LOGFILE, if it exists, and maintains port-forwards using
! 7: # IP-tables so that they always point to the correct host. See
! 8: # $PORTSFILE for details on configuring this. dnsmasq must be version 2.34
! 9: # or later.
! 10: #
! 11: # To enable this script, add
! 12: # dhcp-script=/usr/sbin/dnsmasq-portforward
! 13: # to /etc/dnsmasq.conf
! 14: #
! 15: # To enable logging, touch $LOGFILE
! 16: #
! 17:
! 18: PORTSFILE=/etc/portforward
! 19: LOGFILE=/var/log/dhcp.log
! 20: IPTABLES=/sbin/iptables
! 21:
! 22: action=${1:-0}
! 23: hostname=${4}
! 24:
! 25: # log what's going on.
! 26: if [ -f ${LOGFILE} ] ; then
! 27: date +"%D %T $*" >>${LOGFILE}
! 28: fi
! 29:
! 30: # If a lease gets stripped of a name, we see that as an "old" action
! 31: # with DNSMASQ_OLD_HOSTNAME set, convert it into a "del"
! 32: if [ ${DNSMASQ_OLD_HOSTNAME} ] && [ ${action} = old ] ; then
! 33: action=del
! 34: hostname=${DNSMASQ_OLD_HOSTNAME}
! 35: fi
! 36:
! 37: # IPv6 leases are not our concern. no NAT there!
! 38: if [ ${DNSMASQ_IAID} ] ; then
! 39: exit 0
! 40: fi
! 41:
! 42: # action init is not relevant, and will only be seen when leasefile-ro is set.
! 43: if [ ${action} = init ] ; then
! 44: exit 0
! 45: fi
! 46:
! 47: # action tftp is not relevant.
! 48: if [ ${action} = tftp ] ; then
! 49: exit 0
! 50: fi
! 51:
! 52: if [ ${hostname} ]; then
! 53: ports=$(sed -n -e "/^${hostname}\ .*/ s/^.* //p" ${PORTSFILE})
! 54:
! 55: for port in $ports; do
! 56: verb=removed
! 57: protocol=tcp
! 58: if [ ${port:0:1} = u ] ; then
! 59: protocol=udp
! 60: port=${port/u/}
! 61: fi
! 62: src=${port/:*/}
! 63: dst=${port/*:/}
! 64: # delete first, to avoid multiple copies of rules.
! 65: ${IPTABLES} -t nat -D PREROUTING -p $protocol --destination-port $src -j DNAT --to-destination ${3}:$dst
! 66: if [ ${action} != del ] ; then
! 67: ${IPTABLES} -t nat -A PREROUTING -p $protocol --destination-port $src -j DNAT --to-destination ${3}:$dst
! 68: verb=added
! 69: fi
! 70: if [ -f ${LOGFILE} ] ; then
! 71: echo " DNAT $protocol $src to ${3}:$dst ${verb}." >>${LOGFILE}
! 72: fi
! 73: done
! 74: fi
! 75:
! 76: exit 0
! 77:
! 78:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>