DHCP blokkolása brigelt openvpn esetére

Valamilyen rejtélyes oknál fogva, két távoli ubuntu szerver bridgelt vpn kapcsolatán keresztül a window$os gépek időnként a távoli szerver dhcp-jéről kapnak ip címet, míg az osx-eknál ez sosem fordult elő. legalábbis nem észleltük.

Annak érdekében hogy ezt megakadályozzam a következő beállításokkal próbálkozom.

ebtables modulokat töltök be: - valójában az ebt_ip modul kivételével mind betöltődne magától. -

$ cat /etc/modules

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

8139too
8139cp
loop
lp
p4-clockmode
w83627hf
nf_conntrack_ftp
nf_conntrack_tftp
#add ebtables modules
ebtables
ebtable_filter
ebt_ip

A kliens és a szerver ugyanazokat a szkripteket használja, - természetesen néhány fix paraméter megváltoztatásával - ezért van a kavarás a változókkal a szkript elején.

$ cat up.sh

#!/bin/bash

netaddr() {
  local OIFS IFS IPA NM IP MASK
  OIFS=$IFS; IFS="."; IP=( $1 ); MASK=( $2 ); IFS=$OIFS

  for i in {0..3}; do
    echo -n "$(( ${IP[i]} & ${MASK[i]} ))$([ $i -lt 3 ] && echo ".")"
  done
}

DIP=192.168.50.0
DMASK=255.255.255.0

# br0 tap1 1500 1574 192.168.50.51 255.255.255.0 init
BR="$1"; shift
DEV="$1"; shift
MTU="$1"; shift
BUF="$1"; shift
if [ "$1" ]; then
  IP="$1"; shift
  MASK="$1"; shift
else
  IP=$DIP
  MASK=$DMASK
fi

NET="$(netaddr "$IP" "$MASK")"

/sbin/ip link set "$DEV" up promisc on mtu "$MTU"
/sbin/brctl addif $BR $DEV

ebtables -t nat -D PREROUTING -i "$DEV" -p IPv4 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP
ebtables -t nat -D POSTROUTING -o "$DEV" -p IPv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP
ebtables -t nat -I PREROUTING -i "$DEV" -p IPv4 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP
ebtables -t nat -I POSTROUTING -o "$DEV" -p IPv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP

route del -net "$NET" netmask "$MASK" dev $DEV >/dev/null 2>&1
route add -net "$NET" netmask "$MASK" dev $BR  || true

$ cat down.sh

#!/bin/bash

DIP=192.168.50.0
DMASK=255.255.255.0

netaddr() {
  local OIFS IFS IPA NM IP MASK
  OIFS=$IFS; IFS="."; IP=( $1 ); MASK=( $2 ); IFS=$OIFS

  for i in {0..3}; do
    echo -n "$(( ${IP[i]} & ${MASK[i]} ))$([ $i -lt 3 ] && echo ".")"
  done
}

# br0 tap1 1500 1574 192.168.50.51 255.255.255.0 init
BR="$1"; shift
DEV="$1"; shift
MTU="$1"; shift
BUF="$1"; shift
if [ "$1" ]; then
  IP="$1"; shift
  MASK="$1"; shift
else
  IP=$DIP
  MASK=$DMASK
fi

NET="$(netaddr "$IP" "$MASK")"

route del -net "$NET" netmask "$MASK" dev $BR

ebtables -t nat -D PREROUTING -i $DEV -p IPv4 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP
ebtables -t nat -D POSTROUTING -o $DEV -p IPv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP

/sbin/brctl delif $BR $DEV || true
/sbin/ip link set "$DEV" down || true

úgy néz ki, hogy működőképes, de úgy vagyok vele, mint az egyszeri ember, aki leesett a 100 emeletes toronyház tetejéről, és esés közben minden emeletnél mondogatja magának: eddig jó:)

Ennek ellenére, vagy tán éppen ezért, néhány keresetlen szóval, epés megjegyzéssel, meg ilyesmivel hozzájárulhatnátok a szkriptek jobbításéhoz. már ha lehetséges ilyen egyszerű szkriptek esetén. :)

Hozzászólások

Szvsz ha két LAN-t összebridgelsz (akár VPN tunnellel, akár egy fizikai bridge-dzsel), abból egy LAN lesz, egy LAN-ba pedig egy DHCP szervert illik tenni...

igaz. de 2 már sok:))
ezért kellet szeparálni a dhcpket.

mindkét hálózat saját dhcp-vel, nameserverel, postfixel, stb bír, és mivel a net elérés olyan mint a kutya vacsorája, mind a kettőnek kell is a saját dhcp.

ha esetleg nincs net, meghalna a hálózat azon része amelyiknek nincs saját dhcp-je. ez meg nem fordulat elő. - persze ettől még előfordul:) -

mellesleg - szerintem - a window$ban van valami gány, mert mással nem fordult még elő, hogy a távoli szerverről kapna ip-t, ugyanis a lokális előbb kell hogy válaszoljon.

de ez van.