Debian Lenny: OpenVPN TAP-Interface bei Systemstart automatisch erstellen

Da ich mich derzeit mit dem konfigurieren eines Debian Servers für meinen derzeitigen Job beschäftige, hier mal eine kleine Anleitung im zusammenhang mit OpenVPN. Es geht hier speziell um gebridgetes VPN. Mit dem folgenden Script wird bei jedem Start automatisch ein virtuelles TAP Device für OpenVPN erstellt und zur Ethernet Bridge hinzugefügt.

openvpn-logo

Folgende Pakete müssen installiert sein:

  • openvpn
  • bridge-utils

In /etc/network/interfaces wird die Bridge br0 eingetragen und konfiguriert:

# The primary network interface
auto br0
iface br0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
dns-nameservers 192.168.0.1
bridge_ports all

Unter bridge_ports sind alle Interfaces einzutragen die bei Systemstart zur Bridge hinzugefügt werden sollen. Da es in meinem Fall nur ein physikalisches Interface gibt habe ich all eingetragen. Alternativ wären die einzelnen Interfaces eth0, eth1, etc. anzugeben.
ACHTUNG: Die Interfaces die zur Bridge hinzugefügt werden sollen dürfen nicht in der Datei eingetragen und somit konfiguriert sein.

debian-logo

Nun zum eigentlichen Startscript für das tap Interface. Das Script stammt ursprünglich von hier und war für OpenWRT vorgesehen.
In /etc/init.d/ sollte nun folgendes Script erstellt werden:

#!/bin/sh

# Creates TAP devices for use by OpenVPN and adds them to Bridge

# Define Bridge Interface
br="br0"
# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

case "$1" in
        start)
                # Make sure module is loaded
                insmod tun
                # Build tap devices
                for t in $tap; do
                    openvpn --mktun --dev $t
                done
                # Add TAP interfaces to bridge
                for t in $tap; do
                    brctl addif $br $t
                done
                #Configure bridged interfaces
                for t in $tap; do
                    ifconfig $t 0.0.0.0 promisc up
                done
        ;;
        stop)
                for t in $tap; do
                    ifconfig $t 0.0.0.0 down
                done
                for t in $tap; do
                    brctl delif $br $t
                done
                for t in $tap; do
                    openvpn --rmtun --dev $t
                done
                rmmod tun
        ;;
         *)
                echo "$0 {start|stop}"
        ;;
esac

Ich nenne die Datei Beispielsweise tap-interfaces.

Diese Datei muss nun mit

chmod +x tap-interfaces

ausführbar gemacht werden und abschließend mit

update-rc.d /etc/init.d/tap-interfaces defaults

zu den Scripten die SysVinit bei Systemstart lädt hinzugefügt werden.

Comments (1)

  1. 19:53, 13. Februar 2010Onkel_T  / Reply

    Danke für’s tap-script.

    Hier das von mir:
    #!/bin/sh -e
    ### BEGIN INIT INFO
    # Provides: networking
    # Required-Start: mountkernfs ifupdown $local_fs
    # Required-Stop: ifupdown $local_fs
    # Default-Start: S
    # Default-Stop: 0 6
    # Short-Description: Raise network interfaces.
    ### END INIT INFO

    #################################
    # Set up Ethernet bridge on Linux
    # Requires: bridge-utils
    #################################
    # http://openvpn.net/index.php/open-source/documentation/miscellaneous/76-ethernet-bridging.html#linuxscript
    # http://www.blablubb.at/
    # Creates TAP devices for use by OpenVPN and adds them to Bridge

    PATH=”/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin”

    # Define Bridge Interface
    br=”br0″
    # Define list of TAP interfaces to be bridged,
    # for example tap=”tap0 tap1 tap2″.
    tap=”tap0 tap1 tap2 tap3 tap4 tap5 tap6 tap7 tap8 tap9″

    case “$1″ in
    start)
    # Define Bridge Interface
    br=”br0″

    # Define list of TAP interfaces to be bridged,
    # for example tap=”tap0 tap1 tap2″.
    tap=”tap0 tap1 tap2 tap3 tap4 tap5 tap6 tap7 tap8 tap9″

    # Define physical ethernet interface to be bridged
    # with TAP interface(s) above.
    eth=”eth2″
    eth_ip=”10.8.0.2″
    eth_netmask=”255.255.255.0″
    eth_broadcast=”10.8.0.255″

    for t in $tap; do
    openvpn –mktun –dev $t
    done

    brctl addbr $br
    brctl addif $br $eth

    for t in $tap; do
    brctl addif $br $t
    done

    for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
    done
    ifconfig $eth 0.0.0.0 promisc up

    ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
    ;;
    stop)
    ####################################
    # Tear Down Ethernet bridge on Linux
    ####################################

    # Define Bridge Interface
    br=”br0″

    # Define list of TAP interfaces to be bridged together
    tap=”tap0 tap1 tap2 tap3 tap4 tap5 tap6 tap7 tap8 tap9″

    ifconfig $br down
    brctl delbr $br

    for t in $tap; do
    openvpn –rmtun –dev $t
    done
    ;;
    *)
    echo “$0 {start|stop}”
    ;;
    esac

Hinterlasse eine Antwort

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Pingbacks (0)

› No pingbacks yet.