Import von VCard- und ICal-Dateien ueber ADB
[krt-msg] / 2008-05-16T00:00:00Z.msg
1 From: Boris Kraut <krt@nurfuerspam.de>\r
2 Date: Fri, 16 May 2008 00:00:00 +0000\r
3 Category: \r
4 Sender: \r
5 Message-ID: <20080516000000.aZT62B@silberbruch>  \r
6 References: \r
7 Keywords: \r
8 Comments: \r
9 To: undisclosed-recipients: ;\r
10 Subject: WRT54GL mit OpenWRT Firmware und OpenVPN\r
11 \r
12 OpenWRT [1] laesst sich bequem ueber das Webinterface der Original-Firmware\r
13 beziehungweise jeder anderen Custom-Firmware einspielen -in meinem Fall\r
14 DD-WRT [2]. Fuer den Linksys WRT54GL [3] muss man noch auf die Version mit dem\r
15 alten 2.4er Kernel (openwrt-wrt54g-2.4-squashfs.bin [4]) zurueckgreifen, da\r
16 die Treiber fuer die WLAN-Komponente momentan nur dort stabil laufen, wer\r
17 WLAN nicht braucht, kann auch die 2.6er Version nehmen. Vor dem Flashen\r
18 der Firmware sollte man per Reset-Knopf alles auf die Standard-Einstellungen\r
19 zuruecksetzen und nach dem Flashen auch gut ein paar Minuten warten bis\r
20 alles fertig ist.\r
21 \r
22 Standardmaessig nimmt der Router nach dem Flashen die IP 192.168.1.1 an und\r
23 wartet auf dem Telnet-Port auf Befehle. Zu aller erst habe ich einige\r
24 Einstellungen vorgenommen, die verhinden sollen, dass ich das Geraet durch\r
25 unvorsichtige Spielereien in einen Haufen Elektroschrott verwandle:\r
26 \r
27 $ telnet 192.168.1.1\r
28 \r
29 $ nvram set boot_wait=on\r
30 $ nvram set boot_time=10\r
31 $ nvram commit && reboot\r
32 \r
33 In einem zweiten Schritt vergebe ich ein Passwort fuer den root-Account.\r
34 OpenWRT stellt dann auch gleich von Telnet auf SSH um. Wer will kann ja\r
35 auch gleich noch von Passwort-Auth in der /etc/config/dropbear auststellen\r
36 und auf PublicKey umstellen, hierzu bitte ins OpenWRT-Wiki schauen, wo sich\r
37 ein eigener Eintrag dem Thema Dropbear Public Key Auth [5] widmet. Fuer die\r
38 Einrichtung des Routers reicht mir vorerst allerdings ein..\r
39 \r
40 $ telnet 192.168.1.1\r
41 \r
42 $ passwd\r
43 $ reboot\r
44 \r
45 Bei den meisten Leuten soll ein Router vor allem einen Zugang zum Internet\r
46 herstellen, so auch bei mir. Ich stelle also zum einen die ueblichen DSL-\r
47 Angaben ein und aendere bei der Gelegenheit auch gleich noch die IP und den\r
48 Hostnamen des Routers. Das meiste kann man auch ueber die /etc/config/network\r
49 einstellen:\r
50 \r
51 $ ssh root@192.168.1.1\r
52 \r
53 $ uci set network.lan.ipaddr="192.168.0.1"\r
54 $ uci set network.wan.proto=pppoe\r
55 $ uci set network.wan.username=DSLBENUTZER\r
56 $ uci set network.wan.password=DSLPASSWORT\r
57 $ uci commit network\r
58 $ uci set system.cfg1.hostname=XSPHOSTNAME\r
59 $ uci commit system\r
60 $ ifup wan && reboot\r
61 \r
62 Um weitere Programme besonders einfach auf dem Geraet zum Laufen zu bringen,\r
63 bietet OpenWRT ein eigenes Repository, das man mit dem Werkzeug ipkg sich zu\r
64 Nutze machen kann. Ich verbinde mich also wieder per SSH mit dem Router und\r
65 aktualisiere die lokale Liste der vorhandenen Programme und fuehre gleich ein\r
66 Upgrade von wget durch, dass angeblich im momentanen Release von OpenWRT\r
67 fehlerhaft sein kann:\r
68 \r
69 $ ssh root@192.168.0.1\r
70 \r
71 $ ipkg update\r
72 $ ipkg -force-overwrite install wget\r
73 \r
74 Als naechstes moechte ich, dass ich auch von aussen ueber das Internet auf\r
75 meinen Router und das dahinter liegende Netzwerk zugreifen kann; was auch\r
76 spaeter  beim Einrichten des OpenVPN sehr wichtig werden wird. Da ich meine\r
77 IP-Adresse dynamisch von meinem Provider zugewiesen bekomme und weil ich\r
78 natuerlich mir auch die IP nicht wirklich merken will, habe ich mir schon\r
79 vor einiger Zeit einen Account bei dem DynDNS-Anbieter No-Ip [6] besorgt, den\r
80 ich jetzt vom Router aus aktualisieren lasse. Neben No-Ip kann mann auch\r
81 noch andere Anbieter nutzen, muss dann aber entsprechende AEnderungen\r
82 vornehmen; zoneedit, tzo, changeip, dyndns, hn, noip, eurodyndns,\r
83 ods, ovh und regfish sind moeglich. Weitere Informationen gibt es natuerlich\r
84 im OpenWRT-Wiki DDNS-HowTo [7]; die Konfigurationsdatei ist die\r
85 /etc/config/updatedd.\r
86 \r
87 $ ipkg install updatedd updatedd-mod-noip\r
88 $ uci set updatedd.cfg1=updatedd\r
89 $ uci set updatedd.cfg1.service=noip\r
90 $ uci set updatedd.cfg1.username=NOIPBENUTZER\r
91 $ uci set updatedd.cfg1.password=NOIPPASSWORT\r
92 $ uci set updatedd.cfg1.host=NOIPHOSTNAME\r
93 $ uci set updatedd.cfg1.update=1\r
94 $ uci commit updatedd\r
95 \r
96 Fuer die meisten ist es zwar eher uninteressant, ob auf dem Router die\r
97 richtige Uhrzeit eingestellt ist oder nicht, aber fuer Logdateien und spaeter\r
98 den OpenVPN-Einsatz ist es wichtig, einen korrekten Zeitgeber zu haben. Ich\r
99 lasse den Router ueber NTP die aktuelle Zeit vom Ubuntu-Server abrufen. Wer\r
100 zudem noch will, dass der Router die Zeit auch weiterverteilt, sollte\r
101 sich das openntpd-Paket anschauen. Mir genuegt der simple ntpclient:\r
102 \r
103 $ ipkg install ntpclient\r
104 $ /usr/sbin/ntpclient -c 1 -s -h ntp.ubuntu.com\r
105 $ nvram set ntp_server=ntp.ubuntu.com\r
106 $ nvram set time_zone=UTC\r
107 $ nvram commit\r
108 \r
109 Eher zufaellig habe ich festgestellt, dass standardmaessig ein HTTP-Server\r
110 gestartet wird, was mich ja bei DD-WRT schon sehr gestoert hat. Der Server\r
111 macht nicht viel, man kann ihn die Daten aus /www/ ausgeben lassen und wird\r
112 wohl fuer die optional verfuegbare GUI-Konfiguration benoetigt; ich dagegen\r
113 deaktiviere ihn also kurzer Hand:\r
114 \r
115 $ /etc/init.d/httpd disable\r
116 \r
117 Das Funknetzwerk ist dagegen standardmaessig deaktiviert und muss also erst\r
118 freigegeben werden. Ich stelle also den Channel und die SSID ein, sorge\r
119 dafuer, dass die SSID auch oeffentlich bekanntgegeben wird. Bei der\r
120 Verschluesselung kann man zwischen wep, wpa, wpa2, psk und psk2 waehlen. WPA\r
121 bezeichnet hier immer die Enterprise Variante, WPA Personal wird hier nach\r
122 dem Private Shared Key mit PSK bezeichnet.\r
123 \r
124 $ ipkg install nas\r
125 $ uci set wireless.wl0.disabled=0\r
126 $ uci set wireless.wl0.channel=10\r
127 $ uci set wireless.cfg2.ssid=SSIDNAME\r
128 $ uci set wireless.cfg2.hidden=0\r
129 $ uci set wireless.cfg2.encryption=psk2\r
130 $ uci set wireless.cfg2.key=WPA2KEY\r
131 $ uci commit wireless && wifi\r
132 \r
133 Weiterhin habe ich einige Einstellungen an der /etc/dnsmasq.conf vorgenommen,\r
134 die noch nicht ueber uci erreichbar sind:\r
135 \r
136 > # hostname auf hostname.domain erweitern\r
137 > expand-hosts\r
138 >\r
139 > # Autoritativer Server\r
140 > dhcp-authoritative\r
141 >\r
142 > #\r
143 > domain=local\r
144 >\r
145 > # Rechner aus der Domain .local nur intern Aufloesen und nicht an einen\r
146 > # uebgergeordneten DNS-Server weitergeben; auch:\r
147 > # /local2.domain.tld/ip.ip.ip.ip. -  *.local2.domain.tld ueber ip.ip.ip.ip aufloesen\r
148 > # //ip.ip.ip.ip                   -  nicht FQDNs ueber ip.ip.ip.ip aufloesen\r
149 > # //                              -  FQDNslokal aufloesen\r
150 > local=/local/\r
151 >\r
152 > # Spezielle DHCP-Optionen; 3 gibt den Router an, 6 den DNS-Server. Weitere\r
153 > # Moeglichkeiten ueber dnsmasq --help dhcp.\r
154 > dhcp-option=3,192.168.0.1\r
155 > dhcp-option=6,192.168.0.1\r
156 >\r
157 > # Statische IPs an bestimme MAC-Adresse / Hostname vergeben:\r
158 > dhcp-host=MAC:MAC:MAC:MAC:MAC:MAC,HOSTNAME,IP.IP.IP.IP,infinite\r
159 \r
160 OpenVPN zu installieren ist relativ einfach und laesst sich wieder ueber\r
161 ipkg erledigen. Weiterhin leg ich noch ein gesondertres Verzeichnis fuer\r
162 OpenVPN an.\r
163 \r
164 $ ipkg install openvpn\r
165 $ mkdir /etc/openvpn/ && cd /etc/openvpn\r
166 \r
167 Die noetigen Schluessel - genauere Informationen liefert die Webseite von\r
168 OpenVPN [8] - erstelle ich aufgrund der staerkeren Rechenleistung auf einem\r
169 richtigen Rechner mit OpenSSL und OpenVPN und kopiere sie dann auf den\r
170 Router. Fuer jeden Teilnehmer im VPN sollte man natuerlich eigene\r
171 Clientzertifikate erstellen, hier die markierten Zeilen:\r
172 \r
173 $ openssl req -nodes -new -x509 -days 1825 -keyout ca.key -out ca.crt\r
174 \r
175 $ openssl req -nodes -new -keyout server.key -out server.csr\r
176 $ openssl ca -cert ca.crt -keyfile ca.key -out server.crt -in server.csr\r
177 \r
178 $ openssl req -nodes -new -keyout client.key -out client.csr\r
179 $ openssl ca -cert ca.crt -keyfile ca.key -out client.crt -in client.csr\r
180 \r
181 $ openssl dhparam -out dh.pem 2048\r
182 \r
183 $ openvpn --genkey --secret shared.key;\r
184 \r
185 $ scp * root@192.168.0.1:/etc/openvpn\r
186 \r
187 Zurueck auf dem Router lege ich noch eine Konfigurationsdatei an:\r
188 \r
189 $ cd /etc/openvpn\r
190 $ chmod 0600 /etc/openvpn/server.key\r
191 $ vi server.conf\r
192 \r
193 > ### network options\r
194 > port 1194\r
195 > proto udp\r
196 > dev tun\r
197 > ### certificate and key files\r
198 > ca /etc/openvpn/ca.crt\r
199 > cert /etc/openvpn/server.crt\r
200 > key /etc/openvpn/server.key\r
201 > dh /etc/openvpn/dh.pem\r
202 > ### (optional) use a shared key to initialize TLS negotiation\r
203 > tls-auth /etc/openvpn/shared.key 0\r
204 > ### VPN subnet\r
205 > server 10.8.0.0 255.255.255.0\r
206 > ### (optional) make local network behind the VPN server accessible for the VPN clients\r
207 > push "route 192.168.1.0 255.255.255.0"\r
208 > ### (optional) make the VPN server a gateway for the internet for the VPN clients\r
209 > push "redirect-gateway"\r
210 > ### (optional) compression (might make your WRT sluggish or not, depending on the model and what you have running...)\r
211 > comp-lzo\r
212 > keepalive 10 120\r
213 > status /tmp/openvpn.status\r
214 \r
215 Einen ersten Testlauf des Servers starte ich mit dem folgenden Befehl:\r
216 \r
217 $ openvpn --config /etc/openvpn/server.conf\r
218 \r
219 Da keine Fehler aufgetreten sind, aktiviere ich den OpenVPN-Server beim\r
220 Booten und starte danach den Router neu.\r
221 \r
222 $ /etc/init.d/openvpn enable\r
223 $ reboot\r
224 \r
225 Da ich mich ja nicht nur aus dem lokalen Netzwerk mit dem OpenVPN-Server\r
226 verbinden will, sondern auch von aussen -also aus dem Interenet- eine\r
227 gesicherte Verbindung ins heimische Netz herstellen will, muessen auch noch\r
228 einige Einstellungen an der Firewall gemacht werden, die leider auf der\r
229 offiziellen Webseite von OpenVPN nicht komplett beschrieben waren;\r
230 zusaetlich gebe ich in diesem Schritt auch gleich noch den Port 22 frei,\r
231 um von aussen per SSH auf den Router zu kommen. Die noetigen Einstellungen\r
232 werden in der /etc/firewall.user gemacht:\r
233 \r
234 > ### OpenVPN\r
235 > ## -- Allow connections from outside\r
236 > iptables -t nat -A prerouting_wan -p udp --dport 1194 -j ACCEPT\r
237 > iptables        -A input_wan      -p udp --dport 1194 -j ACCEPT\r
238 > iptables -A INPUT   -i tun+ -j ACCEPT\r
239 > iptables -A FORWARD -i tun+ -j ACCEPT\r
240 > iptables -A OUTPUT  -o tun+ -j ACCEPT\r
241 > iptables -A FORWARD -o tun+ -j ACCEPT\r
242 >\r
243 > ### SSH (optional)\r
244 > ## -- Allow connections from outside\r
245 > iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT\r
246 > iptables        -A input_wan      -p tcp --dport 22 -j ACCEPT\r
247 \r
248 Nachdem nun alles grundsaetzlich eingerichtet ist, kann man das VPN nun einem\r
249 ersten Funktionstest unterziehen. Dazu hole ich mir erstmal via SSH\r
250 beziehungsweise SCP die benoetiten Schluessel vom Router, erstelle eine\r
251 client.conf und starte OpenVPN; wohl gemerkt, alles auf dem Clientrechner,\r
252 auf dem natuerlich auch OpenVPN installiert sein muss:\r
253 \r
254 $ mkdir -p /home/vpntest/openvpn/\r
255 $ cd /home/vpntest/openvpn/\r
256 $ scp root@ACCOUNT.DYNDNSDOMAIN:/etc/openvpn/client.crt ./\r
257 $ scp root@ACCOUNT.DYNDNSDOMAIN:/etc/openvpn/ca.crt ./\r
258 $ scp root@ACCOUNT.DYNDNSDOMAIN:/etc/openvpn/client.key ./\r
259 $ scp root@ACCOUNT.DYNDNSDOMAIN:/etc/openvpn/dh.pem ./\r
260 $ scp root@ACCOUNT.DYNDNSDOMAIN:/etc/openvpn/shared.key ./\r
261 $ scp root@ACCOUNT.DYNDNSDOMAIN:/etc/openvpn/client.csr ./\r
262 $ vi client.conf\r
263 \r
264 Die angesprochene client.conf sieht in etwa so aus:\r
265 \r
266 > client\r
267 > dev tun\r
268 > # dev-node TAP\r
269 > proto udp\r
270 > remote ACCOUNT.DYNDNSDOMAIN.TLD 1194\r
271 > nobind\r
272 > ### (optional) degrade privileges to this user and group after initialization\r
273 > #user nobody\r
274 > #group nogroup\r
275 > ca /home/vpntest/openvpn/ca.crt\r
276 > cert /home/vpntest/openvpn/client.crt\r
277 > key /home/vpntest/openvpn/client.key\r
278 > dh /home/vpntest/openvpn/dh.pem\r
279 > ### (optional) use a shared key to initialize TLS negotiation\r
280 > tls-auth /home/vpntest/openvpn/shared.key 1\r
281 > ### (optional) compression (use only if the server has it)\r
282 > comp-lzo\r
283 \r
284 Gestartet wird das ganze dann ueber:\r
285 \r
286 $ sudo openvpn --config /home/vpntest/openvpn/client.conf\r
287 \r
288 Generell sollte eine grundlegende VPN-Verbindung nun aufgbeaut sein,\r
289 allerdings faengt hier ja der Spass erst an. Welche genauen Moeglichkeiten\r
290 man mit VPNs hat und wie man diese unter OpenVPN nutzt, sollte sich\r
291 leicht mit den folgenden Links und der jeweils bevorzugten Suchmaschine\r
292 herausfinden lassen. Ich hoffe, dass der Artikel einigen Leuten geholfen hat,\r
293 sei es in Sachen OpenWRT oder beim Einrichten von OpenVPN.\r
294 \r
295 \r
296 [1] http://www.openwrt.org/\r
297 [2] http://www.dd-wrt.com/\r
298 [3] http://www-de.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=DE%2FLayout&cid=1130276894513&pagename=Linksys%2FCommon%2FVisitorWrapper\r
299 [4] http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/openwrt-wrt54g-2.4-squashfs.bin\r
300 [5] http://wiki.openwrt.org/DropbearPublicKeyAuthenticationHowto\r
301 [6] http://www.no-ip.com/\r
302 [7] http://wiki.openwrt.org/DDNSHowTo\r
303 [8] http://www.openvpn.net/\r
304 [9] http://arctic-things.blogspot.com/2008/01/internet-gateway-openvpn-openwrt-on.html\r
305 [10] http://wiki.openwrt.org/OpenWrtDocs/KamikazeConfiguration\r
306 [11] http://forum.openwrt.org/viewtopic.php?id=12979\r
307 [12] http://wiki.openwrt.org/OpenVPNHowTo\r
308 [13] http://wiki.openwrt.org/OpenVPNTunHowTo\r
309 [14] http://www.openvpn-wiki.de/wiki/index.php/Hauptseite