Skip to content

Instantly share code, notes, and snippets.

@dmgl
Forked from janvojt/update-resolv-conf.sh
Last active September 8, 2020 16:41
Show Gist options
  • Select an option

  • Save dmgl/c218f4862b8c5d646414ecf2104d3550 to your computer and use it in GitHub Desktop.

Select an option

Save dmgl/c218f4862b8c5d646414ecf2104d3550 to your computer and use it in GitHub Desktop.

Revisions

  1. dmgl revised this gist Sep 8, 2020. No changes.
  2. dmgl revised this gist Sep 8, 2020. No changes.
  3. dmgl revised this gist Sep 8, 2020. No changes.
  4. dmgl revised this gist Sep 8, 2020. No changes.
  5. dmgl revised this gist Sep 8, 2020. No changes.
  6. dmgl revised this gist Apr 27, 2020. 1 changed file with 9 additions and 15 deletions.
    24 changes: 9 additions & 15 deletions update-resolv-conf.sh
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    #!/bin/bash
    #!/usr/bin/env bash
    #
    # Parses DHCP options from openvpn to update resolv.conf
    # To use set as 'up' and 'down' script in your openvpn *.conf:
    @@ -17,8 +17,12 @@
    # foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
    # foreign_option_4='dhcp-option DOMAIN-SEARCH bnc.local'

    ## You might need to set the path manually here, i.e.
    RESOLVCONF=$(which resolvconf)
    ## The 'type' builtins will look for file in $PATH variable, so we set the
    ## PATH below. You might need to directly set the path to 'resolvconf'
    ## manually if it still doesn't work, i.e.
    ## RESOLVCONF=/usr/sbin/resolvconf
    export PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin
    RESOLVCONF=$(type -p resolvconf)

    case $script_type in

    @@ -40,7 +44,7 @@ up)
    done
    R=""
    if [ "$IF_DNS_SEARCH" ]; then
    R="search"
    R="search "
    for DS in $IF_DNS_SEARCH ; do
    R="${R} $DS"
    done
    @@ -52,18 +56,8 @@ up)
    R="${R}nameserver $NS
    "
    done

    id
    echo "Updating resolv.conf for $dev.inet with:"
    echo "$R"

    echo "Waiting for 3 seconds so that resolve.conf picks up interface changes ..."
    sleep 3
    echo "Running $RESOLVCONF -a \"${dev}.inet\" ..."

    #echo -n "$R" | $RESOLVCONF -x -p -a "${dev}"
    #echo -n "$R" | $RESOLVCONF -x -a "${dev}.inet"
    echo -n "$R" | $RESOLVCONF -a "${dev}.inet"
    echo -n "$R" | $RESOLVCONF -x -a "${dev}.inet"
    ;;
    down)
    $RESOLVCONF -d "${dev}.inet"
  7. @janvojt janvojt created this gist Dec 5, 2016.
    77 changes: 77 additions & 0 deletions update-resolv-conf.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,77 @@
    #!/bin/bash
    #
    # Parses DHCP options from openvpn to update resolv.conf
    # To use set as 'up' and 'down' script in your openvpn *.conf:
    # up /etc/openvpn/update-resolv-conf
    # down /etc/openvpn/update-resolv-conf
    #
    # Used snippets of resolvconf script by Thomas Hood <jdthood@yahoo.co.uk>
    # and Chris Hanson
    # Licensed under the GNU GPL. See /usr/share/common-licenses/GPL.
    # 07/2013 colin@daedrum.net Fixed intet name
    # 05/2006 chlauber@bnc.ch
    #
    # Example envs set from openvpn:
    # foreign_option_1='dhcp-option DNS 193.43.27.132'
    # foreign_option_2='dhcp-option DNS 193.43.27.133'
    # foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
    # foreign_option_4='dhcp-option DOMAIN-SEARCH bnc.local'

    ## You might need to set the path manually here, i.e.
    RESOLVCONF=$(which resolvconf)

    case $script_type in

    up)
    for optionname in ${!foreign_option_*} ; do
    option="${!optionname}"
    echo $option
    part1=$(echo "$option" | cut -d " " -f 1)
    if [ "$part1" == "dhcp-option" ] ; then
    part2=$(echo "$option" | cut -d " " -f 2)
    part3=$(echo "$option" | cut -d " " -f 3)
    if [ "$part2" == "DNS" ] ; then
    IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3"
    fi
    if [[ "$part2" == "DOMAIN" || "$part2" == "DOMAIN-SEARCH" ]] ; then
    IF_DNS_SEARCH="$IF_DNS_SEARCH $part3"
    fi
    fi
    done
    R=""
    if [ "$IF_DNS_SEARCH" ]; then
    R="search"
    for DS in $IF_DNS_SEARCH ; do
    R="${R} $DS"
    done
    R="${R}
    "
    fi

    for NS in $IF_DNS_NAMESERVERS ; do
    R="${R}nameserver $NS
    "
    done

    id
    echo "Updating resolv.conf for $dev.inet with:"
    echo "$R"

    echo "Waiting for 3 seconds so that resolve.conf picks up interface changes ..."
    sleep 3
    echo "Running $RESOLVCONF -a \"${dev}.inet\" ..."

    #echo -n "$R" | $RESOLVCONF -x -p -a "${dev}"
    #echo -n "$R" | $RESOLVCONF -x -a "${dev}.inet"
    echo -n "$R" | $RESOLVCONF -a "${dev}.inet"
    ;;
    down)
    $RESOLVCONF -d "${dev}.inet"
    ;;
    esac

    # Workaround / jm@epiclabs.io
    # force exit with no errors. Due to an apparent conflict with the Network Manager
    # $RESOLVCONF sometimes exits with error code 6 even though it has performed the
    # action correctly and OpenVPN shuts down.
    exit 0