LastPass

The Last password you'll have t remember!

2013-06-16

Konfigurera OpenVPN mellan pfSense och DD-WRT

Jag trasslade en del innan jag lyckades få till en lösning som fungerar.

Det här förutsätter att du har en pfSense installerad som brandvägg och att du antingen har statisk IP adress eller någon form an DynDNS.
Det förutsätter dessutom att du har en router som är kompatibel med DD-WRT och att du har installerat DD-WRT på den.
Jag har pfSense 2.0.3 på min server och jag har en TP-Link TL-WR1043ND som router i andra änden med DD-WRT v24SP2- (03/25/13) std (SVN revision 21061)

Innan vi börjar måste vi kolla vilka subnät som finns på båda sidor om tunneln.
I mitt fall har jag ett nät hemma som är 172.16.0.0 med subnätmasken 255.255.248.0 och i andra änden har  jag 192.168.0.0 med subnätmasken 255.255.255.0

Och vi behöver ett nät som inte krockar med någon av dessa båda för att skapa själva tunneln, i mitt fall valde jag 10.1.1.0 med subnätmasken 255.255.255.0. Välj något som passar dig av de privata nätverken.

Så till själva konfigurationen.
Vi börjar på vår pfSense, och klickar in under Firewall och Rules där vi skapar en ny regel.
Action - Pass
Disable skall EJ vara kryssad
Interface - WAN (eller vad ditt WAN interface heter)
Protokoll - UDP
Source - any
Destination - any
Destination port - OpenVPN (1194)
Save

Vi går över till VPN och OpenVPN där vi lägger till en ny
Disable skall EJ vara kryssad
Server Mode - Peer to Peer (Shared Key)
Protocol - UDP
Device Mode - tun
Interface - WAN (eller vad ditt WAN interface heter)
Local port - 1194
Description - Något som är enkelt att förstå

Shared Key - Skall vara i kryssad för att skapa en automatisk nyckel som vi behöver senare.
Encryption algorithm - AES-128-CBC(128-bit)
Hardware Crypto - No Hardware Crypto Acceleration
Tunnel Network - Valfritt som inte krockar men något av de lokala näten, jag valde 10.1.1.0/24
Local Network - DITT-LOKAL-NÄT (i mitt fall 172.16.0.0/21)
Remote Network - NÄTET-DU-SKALL-ANSLUTA-TILL (i mitt fall 192.168.0.0)
Concurrent Connectons - 1
Compression - Kryssa i Compress tunnel packets using the LZO algorithm
Type-of-Service - Lämna blank
Duplicate Connections - Lämna blank

Advanced - Lämna blank

SAVE

När den är skapad går vi tillbaka tillbaka till Firewall, Rules och OpenVPN
Skapa en regel som tillåter allt.
Action - Pass
Disable - Lämna blank
Interface - OpenVPN
Protocol - any
Source - any
Destination - any
Description - Något som är lätt att förstå

SAVE

Konfigurationen av DD-WRT
Vi behöver först gå tillbaka till pfSense under VPN och OpenVPN för att editera den tunnel vi skapade nyss. När vi öppnar den ser vi att det skapats en "Shared Key" som vi måste kopiera. Kopiera allt i den textrutan. Det borde se ut något i stil med:

#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
aeb68165149e096d8f04252dd22fe67d
dd15d8c87e8a577c5c14ebd1ef0bf0b6
0e1d652f91fe66ed3774505e641936dd
458a6db60fb36b969d8bcd37803cf1d3
6d49383ec2daa1d2ae70e3ca49b950a4
bba985940e5e4a15fac702cbcf47f9d0
39f7939980bbb63d2964bb6216471162
0a519fe25d1e0d48044a1ad85dc94758
af6f7b7c52ccaaefa3d013fcbf621366
5ea18d9dc36c3b2a9ac277a9903998fe
45e10b0f79fd443727c3f30278981b3d
0fa525ad843645b4acc28969450bd601
4ce774aba0e830149489dc1592741580
fbd3cd24cc7baa68e06b3e3aedae2565
a36b8a3f687ddbb78411740d755249cf
45c0617c215b66eabc72f60f47b32c64
-----END OpenVPN Static key V1-----


Logga nu in på din DD-WRT router och gå till Administration och Commands

Editera följande text med dina IP adresser och din "Shared Key"

# Move to writable directory and create scripts
cd /tmp
ln -s /usr/sbin/openvpn /tmp/myvpn
 
# Config for Site-to-Site SiteA-SiteB
echo "
remote DIN-pfSense-IPADRESS-ELLER-HOSTNAMN 1194
proto udp
port 1194
dev tun0
secret /tmp/static.key
verb 3
comp-lzo
keepalive 15 60
daemon
cipher AES-128-CBC #needed !!!!
" > SiteA-SiteB.conf
 
# Config for Static Key
echo "
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
DIN-SHARED-KEY-KLISTRAS-IN-HÄR
-----END OpenVPN Static key V1-----
" > static.key
 
# Create interfaces
/tmp/myvpn --mktun --dev tun0
ifconfig tun0 DIN-ANDRA-TUNNELOPADRESS netmask 255.255.255.0 promisc up
 
# Create routes
route add -net DITT-pfSense-LAN netmask DITT-pfSense-SUBNÄTMASK gw DIN-FÖRSTA-TUNNELIPADRESS
 
# Initiate the tunnel
sleep 5
/tmp/myvpn --config SiteA-SiteB.conf

Tänk på ändra:

rad 7 - DIN-pfSense-IPADRESS-ELLER-HOSTNAMN
Här skriver du in adressen till din pfSense

rad 21-26 DIN-SHARED-KEY-KLISTRAS-IN-HÄR
Här skall du klistra in den Shared Key som din pfSense genereade åt dig. Byt ut allt från rad 21 till 26 med textblocket från din pfSense, du ser att första raderna är samma som rad 21-24 och sista raden är samma som rad 26

rad 30 DIN-ANDRA-TUNNELOPADRESS
Här skall vi skriva in tunnelns andra adress. Jag satte 10.1.1.0 som Tunnel Network i min pfSense, det innebär att pfSense kommer att ta adressen 10.1.1.1 och då väljer jag att sätta 10.1.1.2 här.

rad 33 DITT-pfSense-LAN, DITT-pfSense-SUBNÄTMASK och DIN-FÖRSTA-TUNNELIPADRESS
Här skall vi först skriva in nätet som vi vill nå via vår tunnel, i mitt fall byter jag ut DITT-pfSense-LAN mot 172.16.0.0 och sedan är det DITT-pfSense-SUBNÄTMASK vilket subnätmasken för det nätet som skall ersätta , vilket oftast är 255.255.255.0, men i mitt fall 255.255.248.0. Och till slut skall vi byta ut DIN-FÖRSTA-TUNNELIPADRESS som i mitt fall blir 10.1.1.1

Till slut ser min text ut så här:

# Move to writable directory and create scripts
cd /tmp
ln -s /usr/sbin/openvpn /tmp/myvpn

# Config for Site-to-Site SiteA-SiteB
echo "
remote mynet.dyndns.com 1194
proto udp          
port 1194
dev tun0
secret /tmp/static.key
verb 3
comp-lzo
keepalive 15 60
daemon
" > SiteA-SiteB.conf

# Config for Static Key
echo "
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
8ba6ae8b3bb7d3e69c55fe46cfe0d6b6
c6edca0f777207da6b562c44a80e904b
525be479bb91b1a71d7843146d67fb64
2285aa1e49e96739f7bd3c4b8eaec862
4d2e13d270fbcc9e0f2c3432f831fcb5
20d4a751f7a2e7766553991f2d410da0
94b962774efc427d65a9fa91cbe0f901
33760d6dc64511f296c7d71c10086750
7a3a89ce9ddc3f731f06a444ccc90a57
671c381ca3de28b5d80d2aa6ae6992f9
8df99f77840994804b30cdf6acd0ee32
1338148b0b70c6a210174fcae69bf150
8f50d489993b90c7f980324df25ff421
94096e71326372e4905aa6bebdbf910e
bdab1e158e324ec4b7aa825ea3dcc129
4705d986545010ab478a8a2dbd4577a3
-----END OpenVPN Static key V1-----
" > static.key

# Create interfaces
/tmp/myvpn --mktun --dev tun0
ifconfig tun0 10.1.1.2 netmask 255.255.255.0 promisc up

# Create routes
route add -net 172.16.0.0 netmask 255.255.248.0 gw 10.1.1.1

# Initiate the tunnel
sleep 5
/tmp/myvpn --config SiteA-SiteB.conf

(jag har bytt ut både min remote IP adress och min Static Key)

Klistra nu in texten rutan för Commands, skrolla ner och klicka på Save Startup

Nu skall vi skapa en till textfil som skall innehålla följande:
# Open firewall holes
iptables -I INPUT 2 -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
iptables -I INPUT 3 -i tun0 -p icmp -j ACCEPT
iptables -I INPUT 1 -i tun0 -p tcp --dport 80 -j ACCEPT
Klistra in även den texten i rutan för Commands och skrolla ner och klicka istället på Save Firewall.
Om du nu startar om din DD-WRT router så borde du ha en fungerande tunnel mellan dina nät.
Testa genom att pinga en maskin i ditt hemnätverk från en dator på det andra nätet.
Man kan inte pinga DD-WRT routerns IP från hemnätverket, men man kan pinga den andra IP adressen i tunneln, och du kan även använda den IP adressen i din brouwser för att konfigurea din DD-WRT från ditt hemnätverk.
Har du mest Windows datorer i ditt nät och har Vista eller nyare så är brandväggen i dessa datorer på som standard och man kan inte pinga dessa maskiner.

Lycka till!

Källor är bl a pfSens Forum och DD-WRT Wiki

2013-06-11