[Fwd: Re: [TriLUG] OpenVPN: TAP vs TUN]

Paul G. Szabady Paul at ThyService.com
Mon Nov 21 13:12:40 EST 2005


Greetings Josh, et al:

Well, I feel like I'm getting closer, but still no cigar.  :(

I can at least start openvpn and bridging without losing connection to the
server (always a plus when it's remote), and I can connect to it with a
client, but I can't seem to talk either way through the tunnel.  Here are
my config files.  Does anything jump out at anyone as being wrong?  Maybe
I'm doing things in the wrong order?

I apologize in advance for the length of this email, but I wanted to
include as much detail as possible.

============
server.conf:
============
port 1194
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt
server-bridge 192.168.0.2 255.255.255.0 192.168.0.200 192.168.0.249
keepalive 10 120
cipher BF-CBC
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4
mute 20

=============================
(windows XP) client_001.opvn:
=============================
remote <FQDN for openvpn server - changed for privacy> 1194
dev tap
tls-client
client
proto udp
nobind
comp-lzo
verb 3
mute 20
ca ca.crt
cert client_001.crt
key client_001.key
ns-cert-type server
cipher BF-CBC

Almost stock server start-up script (/etc/rc.d/init.d/openvpn) which
also calls bridge-start:

#!/bin/sh
#
# openvpn       This shell script takes care of starting and stopping
#               openvpn on RedHat or other chkconfig-based system.
#
# chkconfig: 345 24 76
#
# description: OpenVPN is a robust and highly flexible tunneling
application that
#              uses all of the encryption, authentication, and
certification features
#              of the OpenSSL library to securely tunnel IP networks over
a single
#              UDP port.
#

# Contributed to the OpenVPN project by
# Douglas Keller <doug at voidstar.dyndns.org>
# 2002.05.15

# To install:
#   copy this file to /etc/rc.d/init.d/openvpn
#   shell> chkconfig --add openvpn
#   shell> mkdir /etc/openvpn
#   make .conf or .sh files in /etc/openvpn (see below)

# To uninstall:
#   run: chkconfig --del openvpn

# Author's Notes:
#
# I have created an /etc/init.d init script and enhanced openvpn.spec to
# automatically register the init script.  Once the RPM is installed you
# can start and stop OpenVPN with "service openvpn start" and "service
# openvpn stop".
#
# The init script does the following:
#
# - Starts an openvpn process for each .conf file it finds in
#   /etc/openvpn.
#
# - If /etc/openvpn/xxx.sh exists for a xxx.conf file then it executes
#   it before starting openvpn (useful for doing openvpn --mktun...).
#
# - In addition to start/stop you can do:
#
#   service openvpn reload - SIGHUP
#   service openvpn reopen - SIGUSR1
#   service openvpn status - SIGUSR2
#
# Modifications:
#
# 2003.05.02
#   * Changed == to = for sh compliance (Bishop Clark).
#   * If condrestart|reload|reopen|status, check that we were
#     actually started (James Yonan).
#   * Added lock, piddir, and work variables (James Yonan).
#   * If start is attempted twice, without an intervening stop, or
#     if start is attempted when previous start was not properly
#     shut down, then kill any previously started processes, before
#     commencing new start operation (James Yonan).
#   * Do a better job of flagging errors on start, and properly
#     returning success or failure status to caller (James Yonan).
#
# 2005.04.04
#   * Added openvpn-startup and openvpn-shutdown script calls
#     (James Yonan).
#

# Location of openvpn binary
openvpn=""
openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
for location in $openvpn_locations
do
  if [ -f "$location" ]
  then
    openvpn=$location
  fi
done

# Lockfile
lock="/var/lock/subsys/openvpn"

# PID directory
piddir="/var/run/openvpn"

# Our working directory
work=/etc/openvpn

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
  echo "Networking is down"
  exit 0
fi

# Check that binary exists
if ! [ -f  $openvpn ]
then
  echo "openvpn binary not found"
  exit 0
fi

# See how we were called.
case "$1" in
  start)
        echo -n $"Starting openvpn: "

        /sbin/modprobe tun >/dev/null 2>&1

        # From a security perspective, I think it makes
        # sense to remove this, and have users who need
        # it explictly enable in their --up scripts or
        # firewall setups.

        echo 1 > /proc/sys/net/ipv4/ip_forward
        /etc/rc.d/init.d/bridge-start

        # Run startup script, if defined
        if [ -f $work/openvpn-startup ]; then
            $work/openvpn-startup
        fi

        if [ ! -d  $piddir ]; then
            mkdir $piddir
        fi

        if [ -f $lock ]; then
            # we were not shut down correctly
            for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
              if [ -s $pidf ]; then
                kill `cat $pidf` >/dev/null 2>&1
              fi
              rm -f $pidf
            done
            rm -f $lock
            sleep 2
        fi

        rm -f $piddir/*.pid
        cd $work

        # Start every .conf in $work and run .sh if exists
        errors=0
        successes=0
        for c in `/bin/ls *.conf 2>/dev/null`; do
            bn=${c%%.conf}
            if [ -f "$bn.sh" ]; then
                . $bn.sh
            fi
            rm -f $piddir/$bn.pid
            $openvpn --daemon --writepid $piddir/$bn.pid --config $c --cd
$work
            if [ $? = 0 ]; then
                successes=1
            else
                errors=1
            fi
        done

        if [ $errors = 1 ]; then
            failure; echo
        else
            success; echo
        fi

        if [ $successes = 1 ]; then
            touch $lock
        fi
        ;;
  stop)
        echo -n $"Shutting down openvpn: "
        for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
          if [ -s $pidf ]; then
            kill `cat $pidf` >/dev/null 2>&1
          fi
          rm -f $pidf
        done

        # Run shutdown script, if defined
        if [ -f $work/openvpn-shutdown ]; then
            $work/openvpn-shutdown
        fi

        success; echo
        rm -f $lock
        ;;
  restart)
        $0 stop
        sleep 2
        $0 start
        ;;
  reload)
        if [ -f $lock ]; then
            for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
                if [ -s $pidf ]; then
                    kill -HUP `cat $pidf` >/dev/null 2>&1
                fi
            done
        else
            echo "openvpn: service not started"
            exit 1
        fi
        ;;
  reopen)
        if [ -f $lock ]; then
            for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
                if [ -s $pidf ]; then
                    kill -USR1 `cat $pidf` >/dev/null 2>&1
                fi
            done
        else
            echo "openvpn: service not started"
            exit 1
        fi
        ;;
  condrestart)
        if [ -f $lock ]; then
            $0 stop
            # avoid race
            sleep 2
            $0 start
        fi
        ;;
  status)
        if [ -f $lock ]; then
            for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
                if [ -s $pidf ]; then
                    kill -USR2 `cat $pidf` >/dev/null 2>&1
                fi
            done
            echo "Status written to /var/log/messages"
        else
            echo "openvpn: service not started"
            exit 1
        fi
        ;;
  *)
        echo "Usage: openvpn
{start|stop|restart|condrestart|reload|reopen|status}"
        exit 1
        ;;
esac
exit 0

=========================
ifconfig output (server):
=========================
br0       Link encap:Ethernet  HWaddr 00:11:11:CC:97:FC
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::211:11ff:fecc:97fc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1603 errors:0 dropped:0 overruns:0 frame:0
          TX packets:679 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:127991 (124.9 KiB)  TX bytes:107444 (104.9 KiB)

eth0      Link encap:Ethernet  HWaddr 00:11:11:CC:97:FC
          inet6 addr: fe80::211:11ff:fecc:97fc/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:1619 errors:0 dropped:0 overruns:0 frame:0
          TX packets:671 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:158296 (154.5 KiB)  TX bytes:110458 (107.8 KiB)
          Interrupt:169

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1002 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1002 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2528944 (2.4 MiB)  TX bytes:2528944 (2.4 MiB)

tap0      Link encap:Ethernet  HWaddr 00:FF:02:F4:5C:60
          inet6 addr: fe80::2ff:2ff:fef4:5c60/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:900 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

=====================================================
route -n (server: (local = 192.168.0.2/255.255.255.0)
=====================================================
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 br0

==============================================
ipconfig (windows client - TAP-Win32 Adapter):
==============================================
Connection-specific DNS Suffix  . :
Description . . . . . . . . . . . : TAP-Win32 Adapter V8
Physical Address. . . . . . . . . : 00-FF-F1-4B-A4-C6
Dhcp Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 192.168.0.200
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
DHCP Server . . . . . . . . . . . : 192.168.0.0
Lease Obtained. . . . . . . . . . : Monday, November 21, 2005 11:29:23 AM
Lease Expires . . . . . . . . . . : Tuesday, November 21, 2006 11:29:23 AM

=============================
route print (windows client):
=============================
C:\>route print (local = 192.168.2.100/255.255.255.0)
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10005 ...00 06 5b ca e2 74 ...... Intel(R) PRO/1000 MT Network Connection
0x30006 ...00 ff f1 4b a4 c6 ...... TAP-Win32 Adapter V8
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.2.1   192.168.2.100       10
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.2.0    255.255.255.0    192.168.2.100   192.168.2.100       10
    192.168.2.100  255.255.255.255        127.0.0.1       127.0.0.1       10
    192.168.2.255  255.255.255.255    192.168.2.100   192.168.2.100       10
      192.168.0.0    255.255.255.0    192.168.0.200   192.168.0.200       20
    192.168.0.200  255.255.255.255        127.0.0.1       127.0.0.1       20
    192.168.0.255  255.255.255.255    192.168.0.200   192.168.0.200       20
        224.0.0.0        240.0.0.0    192.168.2.100   192.168.2.100       10
        224.0.0.0        240.0.0.0    192.168.0.200   192.168.0.200       20
  255.255.255.255  255.255.255.255    192.168.2.100   192.168.2.100       1
  255.255.255.255  255.255.255.255    192.168.0.200   192.168.0.200       1
Default Gateway:       192.168.2.1
===========================================================================
Persistent Routes:
  None



-- 
Paul
@ Thy Service


---------------------------- Original Message ----------------------------
Subject: Re: [TriLUG] OpenVPN: TAP vs TUN
From:    "Paul G. Szabady" <Paul at ThyService.com>
Date:    Fri, November 18, 2005 4:38 pm
To:      "Triangle Linux Users Group discussion list" <trilug at trilug.org>
--------------------------------------------------------------------------

Josh,

I owe you a beer!  That's the *key* piece I was missing:

setup the default gateway, since it gets lost when eth0 is
deconfigured (this step I had to add myself, since it is not mentioned in
the ethernet bridging howto):
> route add default gw $gw

I've set this up on my laptop at home and it works.  Now to implement in
production.  However, I think I'll go onsite, just to be safe.  ;)

Thanks for your help!

-- 
Paul
@ Thy Service

> You can assign an IP to a bridge interface in linux, this makes it not
exactly a bridge, but its what I did to get bridge mode working with
OpenVPN with a single NIC.
>
> I wrote up a nice HOWTO and stuck in on the OpenVPN wiki, but their wiki
has now been down for months.  You can get my (hard to read) notes here:
>
> http://vickeryj.freeshell.org/notes/
>
> In short, I brought up the tap device like so:
>
>> openvpn --mktun --dev tap0
>
> and bridge it with the ethernet device like this:
>
>> brctl addbr br0
>> brctl addif br0 eth0
>> brctl addif br0 tap0
>
> then stick everything in promiscuous mode:
>
>> ifconfig tap0 0.0.0.0 promisc up
>> ifconfig eth0 0.0.0.0 promisc up
>
> then assign the ip that eth0 used to have to the bridge device (this
might be what is missing if you are loosing network connectivity to the
box):
>
>> ifconfig br0 $eth_ip netmask $eth_netmask broadcast $eth_broadcast
>
> setup the default gateway, since it gets lost when eth0 is
> deconfigured (this step I had to add myself, since it is not mentioned
in the ethernet bridging howto):
>> route add default gw $gw
>
> if you want to do this remotely, all those lines need to be in a script,
as you will lose network connectivity to the box until the last ifconfig
line is run.
>
> Josh
>
> On 11/18/05, Paul G. Szabady <Paul at thyservice.com> wrote:
>> Jim,
>>
>> Done that, but note, I'm not even at the point of connecting a client yet.
>>
>> --
>> Paul
>> @ Thy Service
>>
>> > make sure source and destination IP addresses are *not* on the same
network address.
>> >
>> > regards,
>> >
>> > jim
>> >
>> > Jim Ray, President
>> > Neuse River Network, Inc.
>> >
>> > tel: 919-838-1672 x111
>> > toll free: 800-617-7652
>> > cell: 919-606-1772
>> > http://www.Neuse.Net
>> >
>> > Ask about our Clean Technologies.  Established in the Carolinas 1997.
>> >
>> >
>> >
>> > Paul G. Szabady wrote:
>> >
>> >>Greetings,
>> >>
>> >>I am trying to set up a TAP style VPN but I'm apparently missing a
key piece of information and was hoping someone could clarify this
for me.
>> >>
>> >>I have a linux (CentOS 4.2) server w/OpenVPN (openvpn-2.1_beta7-1
installed from RPM built from src), and a windows 2000 server behind
a linksys router.  I need to be able to access the windows server on
the local LAN from the internet, with an IP address in the same
subnet as
>> the
>> >>windows server, hence the desire to set up using TAP/bridge mode.
(Setting up TUN was easy, but didn't work as I needed it to.)  The
>> linux
>> >>machine has a single NIC, which is why this is so confusing to me.
>> When
>> >> I
>> >>set up OpenVPN w/TAP, I lose all network access to the linux server.
Having had a "home grown linux switch" (old pc w/6 NICs running in
>> bridge
>> >>mode), this makes sense.  I believe I have followed all the
>> >>instructions/notes/suggestions from the openVPN howto as well as the
Ethernet-Bridge-netfilter howto.  But I'm still missing something.
>> >>
>> >>The big question:  If I am apparently invisible to the network, how
>> does
>> >>one make a connection (VPN or other) to the linux server?
>> >>
>> >>
>> >>
>> > --
>> > TriLUG mailing list        :
>> http://www.trilug.org/mailman/listinfo/trilug
>> > TriLUG Organizational FAQ  : http://trilug.org/faq/
>> > TriLUG Member Services FAQ : http://members.trilug.org/services_faq/
>>
>> --
>> TriLUG mailing list        :
>> http://www.trilug.org/mailman/listinfo/trilug
>> TriLUG Organizational FAQ  : http://trilug.org/faq/
>> TriLUG Member Services FAQ : http://members.trilug.org/services_faq/
>>
> --
> TriLUG mailing list        :
http://www.trilug.org/mailman/listinfo/trilug TriLUG Organizational FAQ 
: http://trilug.org/faq/
> TriLUG Member Services FAQ : http://members.trilug.org/services_faq/
>






More information about the TriLUG mailing list