home
erste Version am 18.11.2014
letzte Änderung am 14.05.2015

Anpassung der Switch- und Router-Konfiguration
für die Gateway-VM - zwecks VoIP-Nutzung

Das Ziel ist es, ein VoIP-Telefon an einen der Ethernet-Ports des Routers anschließen zu können und gleichzeitig alle WLAN-Clients weiterhin in einen VPN-Tunnel zu zwingen.


Änderungsmotivation

Die unter GatewayV2 dokumentierte OpenVPN-Gateway (Version 2) hat bei mir jetzt für etwa vier Monate sehr gut ihren Zweck erfüllt.

Als ich aber kürzlich auf VoIP umgestellt habe, passte die alte Konfiguration nicht mehr.
Die zwei neu angeschafften IP-Telefone nutzen das Session Initiation Protocol (SIP), welches sich ärgerlicherweise gar nicht gut mit NAT'ing versteht, weil die Datenpakete für den Verbindungsaufbau andere Wege nehmen, als es danach die Pakete für die Sprachübermittlung tun.

Meine alte Verkabelungs-Struktur sah so aus, dass
Somit steckte, abgesehen von meinem Büro, das ganze Haus im VLAN 42, damit im Hide.me-Tunnel und damit wiederum IP-Gateway-technisch in den Niederlanden.

Wenn ich nun aber ein Gerät an einem der OpenWrt-Routerports anschließen möchte, das meine Fritzbox erreichen können soll, dann wird das nix.
Mein erster Ansatz war eine iptables-Regel, die einzelne MAC-Adressen (und zwar die von den IP-Telefonen) am Tunnel vorbeileitet.
Jedoch war das nur teilweise von Erfolg gekrönt ... wegen des o.g. Verhalten von SIP. Eine Forum-Anfrage brachte mich auch nicht weiter.

Daher nun also der neue Ansatz: die Entscheidung bzgl. des VLANs wird erst im OpenWrt-Router getroffen.
Das ist zwar etwas unsicherer als die alte Variante, weil ja ein Böser das Telefon oder gleich den ganzen OpenWrt-Router durch sein Laptop ersetzen könnte, um damit schlimme Dinge (Stichwort Raubmordkopie) im Internet anzustellen, die dann nicht durch den Tunnel gehen würden und somit auf meinen Anschluß zurückzuführen wären.
Aber eventuell lässt sich da was mit iptables- oder Fritzbox-Kindersicherungs-Regeln machen, die nur festgelegte MAC-Adressen rauslassen. Weil dieser Böse aber physikalischen Zugriff auf einen meiner PowerLAN-Adapter brauchen würde, betrachte ich dieses Risiko als nicht sonderlich groß.


Die Änderungen

Der Switchport, an dem die OpenWrt-Router (via PowerLAN) hängen, wurde so umgestellt, dass er untagged im VLAN 1 und tagged im VLAN 42 hängt.
VLANs am Switch
Relevant sind hier die Ports 01, 02 und 16. Auf
Bezogen auf die Switch-Konfiguration der Version 2 wurden also die Ports 09 und 10 auf 16 zusammengefasst und von untagged nach tagged geändert.


Die GatewayVM muss nicht angefasst werden !!!


Primär wurden die Änderungen an den OpenWrt-Routern (WDR4300 mit Barrier Breaker 14.07) vorgenommen.
Die Dienste "firewall", "odhcpd" und "dnsmasq" sind wie bei Version 2 deaktiviert.

Unter Network / Switch wurde ein neues VLAN 42 angelegt:
Switch

Der WAN-Port entspricht "Port 1". Er ist mit der Fritzbox (oben/1/untagged) und der GatewayVM (unten/42/tagged) verbunden.
"Port 2" ist der Ethernet-Port des OpenWrt-Routers mit der Nummer 1. Weil er nur im VLAN 1 untagged definiert ist, landen dort angeschlossene Geräte auf der Fritzbox. Das gilt natürlich ebenso für die identisch eingestellten "Port 4" und "Port 5".
"Port 3" ist der Ethernet-Port des OpenWrt-Routers mit der Nummer 2 und er ist nur im VLAN 42 untagged definiert. Folglich landen dort angeschlossene Geräte im Tunnel.


Unter Network / Interfaces wurde ein neues Interface angelegt:
Interface

Network / Interfaces / LAN / Edit / General Settings:
Interface LAN General Settings

Das LAN-Interface (VLAN 1) soll DHCP von der Fritzbox machen, damit das Router-WebGUI und ssh ohne den lästigen Umweg über VLAN 42 von meinen Rechnern aus erreicht werden können.

Network / Interfaces / LAN / Edit / Physical Settings:
LAN Interface

Das LAN-Interface (VLAN 1) soll keine Bridge mehr zum Wifi sein, Wifi wird in den Tunnel gezwungen.

Network / Interfaces / VLAN42 / Edit / General Settings:
VLAN42 Interface General Settings

Über VLAN 42 soll das Router-WebGUI nicht erreicht werden können. Daher "Unmanaged".

Network / Interfaces / VLAN42 / Edit / Physical Settings:
VLAN42 Interface Physical Settings

Statt auf LAN soll die Bridge zum Wifi nun auf VLAN 42 liegen.

Network / Wifi / Edit:
Wifi Konfiguration

Bei den Wifi-Einstellungen dann auch unter Network nur das VLAN42 markieren.

Die beiden relevanten Konfig-Files sehen folgendermaßen aus:
root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config interface 'lan'
    option proto 'dhcp'
    option ifname 'eth0.1'
    option hostname 'r43b'

config interface 'VLAN42'
    option ifname 'eth0.42'
    option type 'bridge'
    option proto 'none'
    option auto '1'

config switch
    option name 'switch0'
    option reset '1'
    option enable_vlan '1'

config switch_vlan
    option device 'switch0'
    option vlan '1'
    option vid '1'
    option ports '0t 1 2 4 5'

config switch_vlan
    option device 'switch0'
    option vlan '2'
    option vid '42'
    option ports '0t 1t 3'

root@OpenWrt:~# cat /etc/config/wireless

config wifi-device 'radio0'
    option type 'mac80211'
    option hwmode '11g'
    option path 'platform/ar934x_wmac'
    option htmode 'HT20'
    option country 'DE'
    option txpower '20'
    option channel '1'

config wifi-iface
    option device 'radio0'
    option mode 'ap'
    option encryption 'none'
    option network 'VLAN42'
    option ssid 'FreifunkWees01-2b'

config wifi-device 'radio1'
    option type 'mac80211'
    option channel '36'
    option hwmode '11a'
    option path 'pci0000:00/0000:00:00.0'
    option htmode 'HT20'
    option disabled '1'
    option txpower '17'
    option country 'DE'

config wifi-iface
    option device 'radio1'
    option mode 'ap'
    option ssid 'OpenWrt'
    option encryption 'none'
    option network 'VLAN42'


So weit...so geil.... eigentlich ist das besser als vorher :-)

Bei einem WR1043N/ND mit Attitude Adjustment 12.09 sehen die beiden relevanten Konfig-Files folgendermaßen aus:
root@FreifunkWees01:~# cat /etc/config/network

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config interface 'lan'
    option ifname 'eth0.1'
    option proto 'dhcp'
    option hostname 'r10'

config switch
    option name 'rtl8366rb'
    option reset '1'
    option enable_vlan '1'
    option enable_vlan4k '1'

config switch_vlan
    option device 'rtl8366rb'
    option vlan '1'
    option ports '0 5t'

config switch_vlan
    option device 'rtl8366rb'
    option vlan '42'
    option ports '0t 1 2 3 4 5t'

config interface 'VLAN42'
    option type 'bridge'
    option proto 'none'
    option auto '1'
    option ifname 'eth0.42'

root@FreifunkWees01:~# cat /etc/config/wireless

config wifi-device 'radio0'
    option type 'mac80211'
    option macaddr '64:66:b3:fa:34:98'
    list ht_capab 'SHORT-GI-40'
    list ht_capab 'DSSS_CCK-40'
    option country 'DE'
    option txpower '20'
    option channel '11'

config wifi-iface
    option device 'radio0'
    option mode 'ap'
    option encryption 'none'
    option ssid 'FreifunkWees01-1'
    option network 'VLAN42'

Alle vier LAN-Ports und Wifi landen bei dieser Konfiguration im Tunnel bzw. VLAN 42.



Will man einen Rechner ohne Umweg über einen Router ins VLAN42 hängen, dann funktioniert das mit folgender /etc/network/interfaces (hier ein Raspberry Pi 2 mit raspbian-wheezy):
dede@lrp2 ~ $ cat /etc/network/interfaces
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual

wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

auto eth0.42
  iface eth0.42 inet dhcp
  vlan-raw-device eth0
  post-up route del default; route add default gw 192.168.42.254

Der Trick dabei ist die letzte Zeile, durch den die Default-Route auf das VLAN42 umgestellt wird.
dede@lrp2 ~ $ route
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
default         gw              0.0.0.0         UG    0      0        0 eth0.42
192.168.42.0    *               255.255.255.0   U     0      0        0 eth0.42
192.168.178.0   *               255.255.255.0   U     0      0        0 eth0
Ohne die post-up-Zeile sähe es so aus:
dede@lrp2 ~ $ route
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
default         fritz.box       0.0.0.0         UG    0      0        0 eth0
192.168.42.0    *               255.255.255.0   U     0      0        0 eth0.42
192.168.178.0   *               255.255.255.0   U     0      0        0 eth0
...und das VLAN42 wäre zwar erreichbar, aber aller Verkehr ins Internet würde direkt über die Fritzbox laufen.