# OpenVPN  - Clients  können Server connecten, aber nicht pingen



## GrobiG (9. Juli 2010)

*OpenVPN bridge Clients können Lan nicht erreichen und umgekehrt*

Hallo Leute,
ich habe ein Problem mit meiner iptablers firewall,
ich habe z.H. einen pc  mit debian drauf, 2 netzwerkkarten, eine am dsl eine am lan.
Dieser funktiert als firewall, router/gateway dhcp, dns für mein Lan (192.168.1.0/24) und soll auch als OpenVpn server als bridge laufen um mit Freunden Lan games übers inet zu zocken z.B. FlaOut 2 , C&C etc. Die OpenVpn clients haben alle unterschiedliche Netze wie 192.168.0.0/24, 192.168.2.0/24, 192.168.3.0/24 etc.
Die clients können sich zum server connecten, bekommen auch ene ip aus meinem lan zugewiesen, können sich untereinander und den server pingen aber nicht die PCs in meinem Lan. Umgekehrt, der server und auch meine pcs im lan können die clients nicht pingen.
Ich bin mir ziehmlich sicher das es an der iptables firewall liegt denn die routen etc. stimmen alle. Könnte sich jemand vielleicht mal bitte mein firewall sript anschauen wo das problem  liegen könnte denn ich bin so langsam echt am verzweifeln.
Hier nochmal die anforderungen : 
mein Lan darf eigentlich alles bis auf windows shares, netbios etc über internet oder übers vpn wegschicken oder empfangen.
die vpn clients dürfen auf mein Lan  zugreifen  und umgekehrt
aber vpn clients dürfen keine windows shares, netbios etc. wegschicken oder empfangen.
und vpn clients dürfen nicht über mein Lan aufs internet zugreifen können.

meine server interfaces : 
LAN : eth0
Bridge : br0
TAP :  tap0...tapN
WAN : eth1 bzw. ppp0

hier die interessanten Teile meines scripts : 

```
# The iptables command. Shorter and sure.
ipt="/sbin/iptables"
 
# The network interface.
ifWan=ppp0
ifVpnB=br0
ifVpn=tap+

VPN_PORT=1195

##### FIREWALL STOP ##########
... 
##### FIREWALL START/RELOAD/RESTART ##########
echo "Building firewall..."

# Modules
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe ipt_LOG
modprobe iptable_nat
modprobe iptable_filter

# Flush current rules.
$ipt -F INPUT
$ipt -F OUTPUT
$ipt -F FORWARD
$ipt -t nat -F PREROUTING
$ipt -t nat -F POSTROUTING
$ipt -t nat -F OUTPUT
$ipt -F
$ipt -X
 
# Set default policies;
$ipt --policy INPUT DROP
$ipt --policy OUTPUT ACCEPT
$ipt --policy FORWARD DROP
$ipt -t nat --policy PREROUTING ACCEPT
$ipt -t nat --policy POSTROUTING ACCEPT

# SYN flood protection
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

### LOOPBACK ###
echo "Setting LOOPBACK rules"
$ipt -A INPUT -i lo -j ACCEPT

$ipt -A OUTPUT -o lo -j ACCEPT

### WAN ###
echo "Setting WAN rules"
$ipt -A INPUT -i $ifWan -p udp --dport $VPN_PORT -m state --state NEW -j ACCEPT
$ipt -A INPUT -p tcp --dport 137:139 -i $ifWan -j DROP
$ipt -A INPUT -p udp --dport 137:139 -i $ifWan -j DROP
$ipt -A INPUT -p tcp --dport 445 -i $ifWan -j DROP
$ipt -A INPUT -p udp --dport 445 -i $ifWan -j DROP
$ipt -A INPUT -i $ifWan -j ACCEPT

$ipt -A OUTPUT -p tcp --dport 137:139 -o $ifWan -j DROP
$ipt -A OUTPUT -p udp --dport 137:139 -o $ifWan -j DROP
$ipt -A OUTPUT -p tcp --dport 445 -o $ifWan -j DROP
$ipt -A OUTPUT -p udp --dport 445 -o $ifWan -j DROP
$ipt -A OUTPUT -o $ifWan -j ACCEPT

$ipt -A FORWARD -p tcp --dport 137:139 -o $ifWan -j DROP
$ipt -A FORWARD -p udp --dport 137:139 -o $ifWan -j DROP
$ipt -A FORWARD -p tcp --dport 445 -o $ifWan -j DROP
$ipt -A FORWARD -p udp --dport 445 -o $ifWan -j DROP

$ipt -A FORWARD -i $ifWan -o $ifVpnB -j ACCEPT
$ipt -A FORWARD -i $ifWan -o $ifVpn -j ACCEPT

### VPN ###
echo "Setting VPN rules"
$ipt -A INPUT -i $ifVpn -j ACCEPT

$ipt -A OUTPUT -o $ifVpn -j ACCEPT

$ipt -A FORWARD -i $ifVpn -o $ifWan -j ACCEPT
$ipt -A FORWARD -i $ifVpn -o $ifVpnB -j ACCEPT

### BRIDGE ###
echo "Setting BRIDGE rules"
$ipt -A INPUT -i $ifVpnB -j ACCEPT 

$ipt -A OUTPUT -o $ifVpnB -j ACCEPT 

$ipt -A FORWARD -i $ifVpnB -o $ifWan -j ACCEPT
$ipt -A FORWARD -i $ifVpnB -o $ifVpn -j ACCEPT

# Portforwarding
...
# Masquerading
$ipt -t nat -A POSTROUTING -j MASQUERADE
echo "Done!"
```

thx Grobi

...zur vollständigkeit hie noch die scripts für die tap devices und die openvpn server.conf

up.sh

```
#! /bin/sh
BR=$1
DEV=$2
MTU=$3
/sbin/ifconfig $DEV mtu $MTU promisc up
/usr/sbin/brctl addif $BR $DEV
```

down.sh : 

```
#! /bin/sh
BR=$1
DEV=$2
/usr/sbin/brctl delif $BR $DEV
/sbin/ifconfig $DEV down
```

/etc/network/interfaces:

```
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
bridge_ports eth0

auto eth0
iface eth0 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
down ip link set $IFACE promisc off
down ifconfig $IFACE down

auto eth1
iface eth1 inet manual
```

OpenVPN server.conf : 

```
port 1195

proto udp

tun-mtu 1500
mode server
tls-server

dev tap
--script-security 2
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key  # This file should be kept secret
dh /etc/openvpn/keys/dh1024.pem

server-bridge 192.168.1.1 255.255.255.0 192.168.1.129 192.168.1.254

ifconfig-pool-persist ipp.txt

client-to-client

# publish server network to clients
push "route 192.168.1.0 255.255.255.0"

keepalive 10 120

tls-auth /etc/openvpn/keys/ta.key 0 # This file is secret

cipher BF-CBC        # Blowfish (default)

comp-lzo

max-clients 10

client-config-dir ccd

#user nobody
#group nogroup

persist-key
persist-tun

status openvpn-status.log

log-append  openvpn.log

verb 5
```


----------



## GrobiG (11. Juli 2010)

... mir ist noch aufgefallen, wenn der client connected ist, bekommt das tap device keine ip zugewiesen, dachte eigentlich es müsste die selbe ip haben wie die welche der openvpn client zugewiesen bekommt.

```
server:/# ifconfig tap0
tap0      Link encap:Ethernet  Hardware Adresse 00:ff:a6:d0:a4:8e
          inet6-Adresse: fe80::2ff:a6ff:fed0:a48e/64 GÃ¼ltigkeitsbereich:Verbindung
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metrik:1
          RX packets:138 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 SendewarteschlangenlÃ¤nge:100
          RX bytes:12089 (11.8 KiB)  TX bytes:810 (810.0 B)
```
man kann auch in der openvpn-status.log


```
OpenVPN CLIENT LIST
Updated,Sun Jul 11 17:14:51 2010
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
benni,x.x.x.x:50027,24458,8868,Sun Jul 11 17:09:33 2010
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
00:ff:33:80:80:d0,benni,x.x.x.x:50027,Sun Jul 11 17:09:36 2010
GLOBAL STATS
Max bcast/mcast queue length,1
END
x.x.x.x ist die internet ip des clients
```

habe eine tcpdump laufen lassen : 
ping von 192.168.1.5 (pc in meinem lan) an 192.168.1.130 zugewiesene ip des vpn clients
tcpdump -i tap0

```
17:16:52.997803 arp who-has 192.168.1.130 tell 192.168.1.5
17:16:53.023837 arp reply 192.168.1.130 is-at 00:ff:33:80:80:d0 (oui Unknown)
```

dieses 00:ff:33:80:80:d0 ist doch das selbe aus der openvpn-status.log, da kann doch was nicht stimmen...


----------

