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>