<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Krzysztof Burghardt’s blog &#187; Internet</title>
	<atom:link href="http://blog.burghardt.pl/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.burghardt.pl</link>
	<description>Create. Break. Fix. Repeat.</description>
	<lastBuildDate>Sat, 19 Mar 2011 10:10:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Integration of AA Google 404 with Atahualpa</title>
		<link>http://blog.burghardt.pl/2009/11/integration-of-aa-google-404-with-atahualpa/</link>
		<comments>http://blog.burghardt.pl/2009/11/integration-of-aa-google-404-with-atahualpa/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 01:41:55 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Atahualpa]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=361</guid>
		<description><![CDATA[<p>AskApache Google 404 default 404.php does not work properly with Atahualpa theme. To fix those problems create another 404.php file in /themes/atahualpa with this content:</p> <p></p> &#60;?php ob_start&#40;&#41;; include&#40;TEMPLATEPATH . '/functions/bfa_get_options.php'&#41;; get_header&#40;&#41;; if &#40;function_exists&#40;'aa_google_404'&#41;&#41; &#160; &#160; aa_google_404&#40;&#41;; else &#123; ?&#62; &#160; &#160; &#60;h2&#62;&#60;?php _e&#40;'Not Found','atahualpa'&#41;; ?&#62;&#60;/h2&#62; &#160; &#160; &#60;p&#62;&#60;?php _e&#40;&#34;Sorry, but you are looking for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/extend/plugins/askapache-google-404/">AskApache Google 404</a> default 404.php does not work properly with <a href="http://wordpress.org/extend/themes/atahualpa">Atahualpa</a> theme. To fix those problems create another 404.php file in <em>/themes/atahualpa</em> with this content:</p>
<p><span id="more-361"></span></p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
<a href="http://www.php.net/ob_start"><span style="color: #990000;">ob_start</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span>TEMPLATEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/functions/bfa_get_options.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
get_header<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'aa_google_404'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; aa_google_404<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">else</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
&nbsp; &nbsp; &lt;h2&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> _e<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Not Found'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'atahualpa'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h2&gt;<br />
&nbsp; &nbsp; &lt;p&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> _e<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sorry, but you are looking for something that isn't here.&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;atahualpa&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/p&gt;<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
bfa_center_content<span style="color: #009900;">&#40;</span><span style="color: #000088;">$bfa_ata</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'center_content_bottom'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
get_footer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>When it is done, choose <em>wp-content/themes/atahualpa/404.php</em> as <strong>404 File Handling</strong> and enable AA Google 404.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2009/11/integration-of-aa-google-404-with-atahualpa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aktualizacja OpenWRT</title>
		<link>http://blog.burghardt.pl/2009/10/aktualizacja-openwrt/</link>
		<comments>http://blog.burghardt.pl/2009/10/aktualizacja-openwrt/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 23:11:34 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Polish]]></category>
		<category><![CDATA[Asus]]></category>
		<category><![CDATA[OpenWRT]]></category>
		<category><![CDATA[WL-500g]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=327</guid>
		<description><![CDATA[<p>W styczniu opisałem jak zainstalować dopasowaną do własnych potrzeb dystrybucję OpenWRT na routerze ASUS WL-500g Premium. Pora na aktualizację.</p> <p></p> Kopia zapasowa <p>Na wszelki wypadek, gdyby aktualizacja się nie powiodła warto wykonać kopię bezpieczeństwa aktualnego systemu. Informacje na temat wykonywania kopii całego oprogramowania (kernel + squashfs + jffs2) znajdziemy w wiki pod hasłem &#8220;BackupAndRestore&#8220;.</p> Aktualizacja [...]]]></description>
			<content:encoded><![CDATA[<p>W styczniu opisałem jak zainstalować dopasowaną do własnych potrzeb dystrybucję OpenWRT na routerze <a href="/2009/01/openwrt-na-miare-naszych-mozliwosci-i-potrzeb">ASUS WL-500g Premium</a>. Pora na aktualizację.</p>
<p><span id="more-327"></span></p>
<h2>Kopia zapasowa</h2>
<p>Na wszelki wypadek, gdyby aktualizacja się nie powiodła warto wykonać kopię bezpieczeństwa aktualnego systemu. Informacje na temat wykonywania kopii całego oprogramowania (kernel + squashfs + jffs2) znajdziemy w <a href="http://nuwiki.openwrt.org/">wiki</a> pod hasłem &#8220;<a href="http://nuwiki.openwrt.org/oldwiki/BackupAndRestore">BackupAndRestore</a>&#8220;.</p>
<h2>Aktualizacja źródeł</h2>
<p>Zgodnie z instrukcją na stronie <a href="https://dev.openwrt.org/wiki/GetSource">zatytułowanej &#8220;GetSource&#8221;</a> pobieramy źródła. Jeśli mamy jeszcze poprzednie używamy <em>svn switch &#8211;relocate</em>, aby zmienić protokół z <em>https://</em> na <em>svn://</em>, a następnie wydajemy polecenie <em>svn up</em>.</p>
<h2>Nakładanie łatek</h2>
<p>Łatka zwiększająca domyślny limit wielkości obszaru rootfs nie jest już potrzebna. Aktualny limit jest ustawiony wyżej niż ustawiała go łatka.</p>
<p>Łatka włączająca wsparcie dla <a href="http://ocf-linux.sourceforge.net/">OCF</a> w OpenSSL wygląda tak:</p>
<div class="codecolorer-container diff default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="diff codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Index: package/openssl/Makefile<br />
===================================================================<br />
<span style="color: #888822;">--- package/openssl/Makefile &nbsp; &nbsp;<span style="">&#40;</span>wersja 18079<span style="">&#41;</span></span><br />
<span style="color: #888822;">+++ package/openssl/Makefile &nbsp; &nbsp;<span style="">&#40;</span>kopia robocza<span style="">&#41;</span></span><br />
<span style="color: #440088;">@@ -81,6 +81,8 @@</span><br />
&nbsp;define Build/Configure<br />
&nbsp; &nbsp; <span style="">&#40;</span>cd $<span style="">&#40;</span>PKG_BUILD_DIR<span style="">&#41;</span>; \<br />
&nbsp; &nbsp; &nbsp; &nbsp; ./Configure linux-openwrt \<br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --with-cryptodev \</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --with-cryptodev-digests \</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --prefix=/usr \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --openssldir=/etc/ssl \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="">&#40;</span>TARGET_CPPFLAGS<span style="">&#41;</span> \</div></div>
<h2>Konfiguracja źródeł</h2>
<p>Uruchamiamy <em>make menuconfig</em> i wczytujemy poprzednio użyty plik konfiguracyjny.</p>
<p>Następnie w menu wybieramy <strong>Advanced configuration options (for developers)</strong>, a w podmenu <strong>Use ccache</strong> oraz <strong>Toolchain Options</strong>, a w nim <strong>Enable Stack-Smashing Protection support</strong>.</p>
<p>Aby używać najnowszej wersji sterownika WiFi oraz najnowszego firmware wybieramy w menu głównym <strong>Kernel modules</strong>, a następnie <strong>Wireless Drivers</strong>. W tym podmenu wybieramy <strong>kmod-b43</strong> oraz upewniamy się, że <strong>odznaczona pozostaje</strong> opcja <em>kmod-b43legacy</em>.</p>
<p>W tym samym podmenu możemy wybrać <strong>b43 firmware version</strong>. Wybieramy <strong>4.178.10.4 (experimental)</strong>.</p>
<h2>Kompilacja i instalacja</h2>
<p>Kompilację i instalację przeprowadzamy zgodnie z <a href="/2009/01/openwrt-na-miare-naszych-mozliwosci-i-potrzeb/">wcześniejszą instrukcją</a>.</p>
<h2>Problemy</h2>
<p>Jedyny, i w dodatku prosty do usunięcia problem jaki napotkałem to&#8230;</p>
<h3>OPKG: Could not obtain administrative lock</h3>
<p>Jeśli po wydaniu polecenia <em>opkg update</em> zobaczymy komunikat:</p>
<pre>
Collected errors:
 * Could not obtain administrative lock
</pre>
<p>Należy utworzyć katalog <em>/usr/lib/opkg</em>. Jeśli katalog istnieje należy usunąć z niego plik <em>lock</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2009/10/aktualizacja-openwrt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Huawei E272 jako zapasowe łącze routera OpenWRT</title>
		<link>http://blog.burghardt.pl/2009/01/huawei-e272-jako-zapasowe-lacze-routera-openwrt/</link>
		<comments>http://blog.burghardt.pl/2009/01/huawei-e272-jako-zapasowe-lacze-routera-openwrt/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 18:30:08 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Polish]]></category>
		<category><![CDATA[Huawei]]></category>
		<category><![CDATA[OpenWRT]]></category>
		<category><![CDATA[PPP]]></category>
		<category><![CDATA[pppd]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=252</guid>
		<description><![CDATA[<p>Niedawno opisałem instalację &#8220;mydelniczki&#8221; DSL Thomson SpeedTouch 330 w OpenWRT. Tym razem instalujemy &#8220;mydelniczkę&#8221; trzeciej generacji &#8211; Huawei E272 &#8211; jako zapasowe łącze w routerze.</p> <p></p> Konfiguracja źródeł i kompilacja <p>W pliku .config włączamy program chat odpowiedzialny za komunikację z modemem oraz sterownik portów szeregowych na magistrali USB &#8211; usbserial. Możemy włączyć też moduł option [...]]]></description>
			<content:encoded><![CDATA[<p>Niedawno opisałem instalację <a href="/2009/01/openwrt-na-miare-naszych-mozliwosci-i-potrzeb/">&#8220;mydelniczki&#8221; DSL Thomson SpeedTouch 330</a> w OpenWRT. Tym razem instalujemy &#8220;mydelniczkę&#8221; <a href="http://pl.wikipedia.org/wiki/3G">trzeciej generacji</a> &#8211; Huawei E272 &#8211; jako zapasowe łącze w routerze.</p>
<p><span id="more-252"></span></p>
<h2>Konfiguracja źródeł i kompilacja</h2>
<p>W pliku <em>.config</em> włączamy program <em>chat</em> odpowiedzialny za komunikację z modemem oraz sterownik <a href="http://pl.wikipedia.org/wiki/Port_szeregowy">portów szeregowych</a> na magistrali <a href="http://pl.wikipedia.org/wiki/USB">USB</a> &#8211; <em>usbserial</em>. Możemy włączyć też moduł <em>option</em> lub inny odpowiedni dla naszego modemu. Pozostałe ustawienia pozostawiamy niezmienione. Można dodatkowo zainstalować <em>microcom</em>, aby ułatwić sobie ewentualne &#8220;ręczne sterowanie&#8221; modemem.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CONFIG_PACKAGE_chat=y<br />
CONFIG_PACKAGE_kmod-usb-serial=y<br />
CONFIG_PACKAGE_kmod-usb-serial-option=y<br />
CONFIG_PACKAGE_microcom=y</div></div>
<p>Rekompilujemy i instalujemy OpenWRT. (Ewentualnie można doinstalować brakujące pakiety do istniejącej instalacji OpenWRT za pomocą <em>opkg</em>.)</p>
<h2>Port szeregowy</h2>
<p>Ponieważ modem GPRS po podłączeniu nie jest przypisywany przez system do żadnego sterownika (w <a href="http://www.debian.org/">Debianie</a> obsługuje go moduł <em>option</em>, jeśli go nie włączymy możemy użyć ogólnego sterownika portu szeregowego na USB). Dopisujemy w pliku <em>/etc/modules.d/60-usb-serial</em> opcje <strong>vendor</strong> i <strong>product</strong> oraz <em>maxSize</em>.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">usbserial vendor=0x12d1 product=0x1001 maxSize=4096</div></div>
<p>Po tej operacji należy ponownie załadować moduł <em>usbserial</em> poleceniem:</p>
<pre>
# rmmod usbserial
# insmod /lib/modules/`uname -r`/usbserial.ko vendor=0x12d1 product=0x1001 maxSize=4096
</pre>
<h2>Skrypty chata</h2>
<p>Do inicjacji modemu należy użyć skryptów programu <em>chat</em>. Należy stworzyć katalog, np. <em>/etc/chatscripts</em>.</p>
<pre>
# mkdir /etc/chatscripts
</pre>
<p>A następnie w stworzonym katalogu utworzyć pliki <em>/etc/chatscripts/iplus</em> i <em>/etc/chatscripts/iplus-off</em> o następującej zawartości:</p>
<p><em>/etc/chatscripts/iplus</em>:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">TIMEOUT <span style="color: #0000dd;">10</span><br />
ECHO ON<br />
ABORT <span style="color: #ff0000;">&quot;NO CARRIER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO DIALTONE&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;ERROR&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO ANSWER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;BUSY&quot;</span><br />
<span style="color: #ff0000;">''</span> <span style="color: #ff0000;">'rATZ'</span><br />
CLR_ABORT <span style="color: #ff0000;">&quot;ERROR&quot;</span><br />
OK AT<span style="color: #339933;">+</span>CPIN<span style="color: #339933;">=</span><span style="color: #0000dd;">1234</span><br />
<span style="color: #ff0000;">''</span> AT<span style="color: #339933;">+</span>CGDCONT<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;IP&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;www.plusgsm.pl&quot;</span><br />
OK ATD<span style="color: #339933;">*</span><span style="color: #0000dd;">99</span><span style="color: #339933;">#</span><br />
ABORT <span style="color: #ff0000;">&quot;ERROR&quot;</span><br />
CONNECT ``</div></div>
<p><em>/etc/chatscripts/iplus-off</em>:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ABORT <span style="color: #ff0000;">&quot;NO CARRIER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO DIALTONE&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;ERROR&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO ANSWER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;BUSY&quot;</span><br />
<span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #ff0000;">&quot;K&quot;</span><br />
<span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #ff0000;">&quot;+++ath&quot;</span></div></div>
<p>W pierwszym skrypcie należy ustawić własny PIN. Cała ta dziwna sekcja zaczynająca się od <strong>CLR_ABORT</strong> służy do ignorowania odpowiedzi ERROR modemu podczas ponownego łączenia, czyli gdy <a href="http://pl.wikipedia.org/wiki/Karta_SIM">karta SIM</a> jest już odblokowana.</p>
<h2>Konfiguracja połączenia</h2>
<p>Aby skonfigurować połączenie <a href="http://pl.wikipedia.org/wiki/GPRS">GPRS</a> (albo <a href="http://pl.wikipedia.org/wiki/EDGE">EDGE</a> lub <a href="http://pl.wikipedia.org/wiki/HSDPA">HSDPA</a>, ponieważ tutaj o typie połączenia decyduje modem) dodajemy do pliku <em>/etc/config/network</em>:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config interface backup<br />
&nbsp; &nbsp; &nbsp; &nbsp; option ifname &quot;ppp0&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; option proto ppp<br />
&nbsp; &nbsp; &nbsp; &nbsp; option device /dev/ttyUSB0<br />
&nbsp; &nbsp; &nbsp; &nbsp; option connect &quot;/usr/sbin/chat -v -f /etc/chatscripts/iplus&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; option disconnect &quot;/usr/sbin/chat -v -f /etc/chatscripts/iplus-off&quot;</div></div>
<p>Aby połączenie to uczynić domyślnym połączeniem WAN zmieniamy linię <em>config interface backup</em> na <em>config interface <strong>wan</strong></em>.</p>
<p>Aby używać zapasowego łącza wydajemy komendy:</p>
<pre>
# ifdown wan
# ifup backup
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2009/01/huawei-e272-jako-zapasowe-lacze-routera-openwrt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiple FreeBSD jails sharing one IP address</title>
		<link>http://blog.burghardt.pl/2009/01/multiple-freebsd-jails-sharing-one-ip-address/</link>
		<comments>http://blog.burghardt.pl/2009/01/multiple-freebsd-jails-sharing-one-ip-address/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 22:19:35 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[ezjail]]></category>
		<category><![CDATA[jail]]></category>
		<category><![CDATA[PF]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=203</guid>
		<description><![CDATA[<p>If you want to use multiple jails on FreeBSD with only one external IP addresses you may set up all jails on private addressed with little help of loopback interface, NAT and PF.</p> <p></p> Networking <p>Each jail requires one IP address. First create lo1 loopback interface and assign IPs to it:</p> # ifconfig lo1 create [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to use multiple jails on FreeBSD with only one external IP addresses you may set up all jails on private addressed with little help of <a href="http://en.wikipedia.org/wiki/Loopback">loopback</a> interface, <a href="http://en.wikipedia.org/wiki/Network_Address_Translation">NAT</a> and <a href="http://en.wikipedia.org/wiki/PF_(firewall)">PF</a>.</p>
<p><span id="more-203"></span></p>
<h2>Networking</h2>
<p>Each jail requires one IP address. First create lo1 loopback interface and assign IPs to it:</p>
<pre>
# ifconfig lo1 create
# ifconfig lo1 inet 10.0.0.1 netmask 255.255.255.0 alias
# ifconfig lo1 inet 10.0.0.2 netmask 255.255.255.0 alias
...
</pre>
<p>To make this permanent add following lines to <em>/etc/rc.conf</em>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">cloned_interfaces</span>=<span style="color: #ff0000;">&quot;lo1&quot;</span><br />
<span style="color: #007800;">ifconfig_lo1</span>=<span style="color: #ff0000;">&quot;inet 10.0.0.254 netmask 255.255.255.0&quot;</span><br />
<span style="color: #007800;">ifconfig_lo1_alias0</span>=<span style="color: #ff0000;">&quot;inet 10.0.0.1 netmask 255.255.255.0&quot;</span><br />
...</div></div>
<p>Now configure port redirection (forwarding) from your IP to your jails&#8217;s IPs. Here is my <a href="http://www.openbsd.org/faq/pf/index.html">PF</a> line (add it to <em>/etc/pf.conf</em>):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rdr on re0 proto tcp from any to ext._ip port http -&gt; 10.0.0.1 port http<br />
rdr on re0 proto tcp from any to ext._ip port ircd -&gt; 10.0.0.2 port ircd<br />
...</div></div>
<p>If jails need network access (e.g. to download ports) create <a href="http://en.wikipedia.org/wiki/Network_address_translation">NAT</a> on your external network interface:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nat on re0 from lo1:network to any -&gt; (re0)</div></div>
<p>Finally reload PF rules:</p>
<pre>
# pfctl -d
# pfctl -e -f /etc/pf.conf
</pre>
<h2>Ezjail</h2>
<p>Install <strong>ezjail</strong> from <em>/usr/ports/sysutils/ezjail</em>:</p>
<pre>
# cd /usr/ports/sysutils/ezjail
# make install clean
</pre>
<p>After ezjail installation create base jail. This jail is used as skeleton of all jails. Before creating base jail you need to have current FreeBSD sources in <em>/usr/src</em>. If you have built them add <strong>-i</strong> option to update command to prevent (re)building them:</p>
<pre>
# ezjail-admin update
</pre>
<h2>Creating jails</h2>
<p>When basejail is installed we are ready to create jails:</p>
<pre>
# ezjail-admin create -f default apachejail 10.0.0.1
# ezjail-admin create -f default ircjail 10.0.0.2
</pre>
<h2>See also</h2>
<ul>
<li><a href="http://erdgeist.org/arts/software/ezjail/">ezjail &#8211; jail administration framework</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2009/01/multiple-freebsd-jails-sharing-one-ip-address/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OpenWRT na miarę naszych możliwości i potrzeb</title>
		<link>http://blog.burghardt.pl/2009/01/openwrt-na-miare-naszych-mozliwosci-i-potrzeb/</link>
		<comments>http://blog.burghardt.pl/2009/01/openwrt-na-miare-naszych-mozliwosci-i-potrzeb/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 16:06:32 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Polish]]></category>
		<category><![CDATA[Asus]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[OpenWRT]]></category>
		<category><![CDATA[PPPoA]]></category>
		<category><![CDATA[PSK]]></category>
		<category><![CDATA[QoS]]></category>
		<category><![CDATA[WL-500g]]></category>
		<category><![CDATA[WPA]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=214</guid>
		<description><![CDATA[<p>Ile kosztuje router z 5 portowym zarządzlanym przełącznikiem z obsługą VLAN-ów, Wi-Fi (802.11b/g) z WPA-2 PSK, PPPoA (np. Noestrada), PPPoE (np. Multimo), dwoma portami USB (dyskiem twardym lub flash na USB?), możliwością logowania przez SSH, Firewallem (netfilter/iptables), NAT, QoS (z rozpoznawaniem aplikacji na poziomie warstwy 7), (c&#124;r)torrent, wget, DHCP, DNS z pamięcią podręczną, serwerem WWW [...]]]></description>
			<content:encoded><![CDATA[<p>Ile kosztuje router z 5 portowym zarządzlanym przełącznikiem z obsługą <a href="http://pl.wikipedia.org/wiki/Sieć_wirtualna">VLAN</a>-ów, <a href="http://pl.wikipedia.org/wiki/Wi-Fi">Wi-Fi</a> (802.11b/g) z <a href="http://pl.wikipedia.org/wiki/WPA2">WPA-2 PSK</a>, PPPoA (np. Noestrada), <a href="http://pl.wikipedia.org/wiki/PPPoE">PPPoE</a> (np. Multimo), dwoma portami USB (dyskiem twardym lub flash na USB?), możliwością logowania przez <a href="http://pl.wikipedia.org/wiki/SSH">SSH</a>, Firewallem (netfilter/iptables), <a href="http://pl.wikipedia.org/wiki/NAT">NAT</a>, <a href="http://pl.wikipedia.org/wiki/QoS">QoS</a> (z rozpoznawaniem aplikacji na poziomie <a href="http://l7-filter.sourceforge.net/">warstwy 7</a>), (<a href="http://pl.wikipedia.org/wiki/CTorrent">c</a>|<a href="http://pl.wikipedia.org/wiki/RTorrent">r</a>)<a href="http://pl.wikipedia.org/wiki/BitTorrent">torrent</a>, <a href="http://pl.wikipedia.org/wiki/Wget">wget</a>, <a href="http://pl.wikipedia.org/wiki/Dnsmasq">DHCP, DNS z pamięcią podręczną</a>, serwerem WWW i FTP, <a href="http://www.baseciq.org/2002/01/01/oidentd">oidentd</a> z wsparciem dla NAT i na deser obsługą <a href="http://pl.wikipedia.org/wiki/IPv6">IPv6</a>?</p>
<p>Sprzęt: około 300 złotych. Oprogramowanie: wyłącznie darmowe. Czas instalacji: kilka godzin (najdłuższa część to kompilacja całego systemu operacyjnego i wszystkich pakietów, ale jest ona zautomatyzowana i nie wymaga interwencji użytkownika, a sama instalacja zajmuje kilka minut).</p>
<p><span id="more-214"></span></p>
<h2>Od czego zacząć?</h2>
<p>Zaczynamy od kupna <a href="http://wiki.openwrt.org/TableOfHardware">wspieranego przez OpenWRT routera</a>. Chodzi nam wyłącznie o najlepszy sprzęt. Oprogramowanie wymienimy zaraz po zakupie. Według moich priorytetów najlepszym wyborem jest <a href="http://wiki.openwrt.org/OpenWrtDocs/Hardware/Asus/WL500GP">ASUS WL-500g Premium</a>. Na drugim miejscu uplasował się <a href="http://wiki.openwrt.org/OpenWrtDocs/Hardware/Linksys/WRTSL54GS">Linksys WRTSL54GS</a>.</p>
<h2>Gdy mamy już router</h2>
<p>Możemy zacząć od instalacji OpenWRT w wersji <a href="http://downloads.openwrt.org/whiterussian/">WhiteRussian</a>. Opisywać instalacji i konfiguracji WhiteRussian nie będę, każdy najdzie na <a href="http://wiki.openwrt.org/OpenWrtDocs/WhiteRussian/Distributions">ten temat</a> <a href="http://wiki.openwrt.org/OpenWrtDocs/Installation">wiele</a> <a href="http://wiki.openwrt.org/OpenWrtDocs/WhiteRussian/Configuration">informacji</a>. Jeśli się uda i router spełnia nasze oczekiwania możemy skończyć w tym miejscu. Ale jeśli chcemy skonfigurować router w zupełnie dowolny sposób najlepszym rozwiązaniem jest zbudowanie OpenWRT ze źródeł.</p>
<h2>Oprogramowanie niezbędne do zbudowania OpenWRT</h2>
<p>Do zbudowania OpenWRT w <a href="http://www.debian.org/">Debianie</a> lub <a href="http://www.ubuntu.com/">Ubuntu</a> niezbędne jest posiadanie następujących pakietów:</p>
<pre>
# aptitude install build-essential binutils flex bison autoconf gettext texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
</pre>
<h2>Źródła z repozytorium Subversion</h2>
<p>Pobieramy źródła OpenWRT z repozytorium Subversion:</p>
<pre>
$ svn co https://svn.openwrt.org/openwrt/trunk/ openwrt-svn
$ svn co https://svn.openwrt.org/openwrt/packages/ openwrt-svn/feeds/packages
</pre>
<p>Następnie tworzymy dowiązania dla pakietów z katalogu <em>feeds</em>:</p>
<pre>
$ make package/symlinks
</pre>
<h2>Konfiguracja obrazu OpenWRT</h2>
<p>Kolejnym krokiem jest konfiguracja obrazu OpenWRT, wybieramy rodzaj obrazu (np. <a href="http://pl.wikipedia.org/wiki/SquashFS">SquashFS</a>), opcje <a href="http://pl.wikipedia.org/wiki/BusyBox">Busybox</a>, <a href="http://pl.wikipedia.org/wiki/Linux">Linuksa</a> i pakietów:</p>
<pre>
$ make menuconfig
</pre>
<h3>Opcje Target System, Profile, Image</h3>
<p>Dla Asusa WL-500gP <em>Target System</em> należy ustawić na <strong>Broadcom BCM947xx/953xx [2.6]</strong> lub <strong>Broadcom BCM947xx/953xx [2.4]</strong>. Opcja ta wybiera linię jądra, odpowiednio 2.6 lub 2.4. Generalnie należy wybrać 2.6. Jeśli 2.6 nie będzie działało kolejnym krokiem będzie wypróbowanie jądra 2.4.</p>
<p>Jako <em>Target Profile</em> wybieramy <strong>Broadcom BCM43xx WiFi (default)</strong>. Jeśli mamy inny rodzaj kontrolera sieci bezprzewodowej wybieramy właściwą opcję. Przydatne jeśli wymieniliśmy kartę <a href="http://pl.wikipedia.org/wiki/MiniPCI">MiniPCI</a> w routerze np. na opartą na kontrolerze Atheros.</p>
<p><em>Target Images</em> definiuje rodzaj systemu plików używanego jako <strong>/</strong>. Najlepszym wyborem jest <strong>squashfs</strong> zapewniający wyższy stopień kompresji niż <strong>jffs2</strong>. Drugą ważną różnicą jest to, iż jffs2 umożliwia zapis, a squashfs jest tylko do odczytu. Jeśli wybierzemy squashfs na główny system plików, na routerze zostanie stworzony obszar przeznaczony do zapisywania danych w formacie jffs2.</p>
<h3>Advanced configuration options (for developers)</h3>
<p>W menu <em>Build Options</em> wybrałem opcje <strong>Clean all ipkg files before building the rootfs</strong> oraz <strong>Use ccache</strong>. Pierwsza powoduje przebudowanie wszystkich pakietów za każdym razem, a druga włącza użycie pamięci podręcznej dla plików obiektów. program <a href="http://ccache.samba.org/">ccache</a> przyspiesza kompilację w przypadku budowania OpenWRT po raz kolejny, z niewielkimi zmianami w stosunku do poprzedniej konfiguracji.</p>
<p>Natomiast w menu <em>Toolchain Options</em> zaznaczyłem <strong>Enable Smash Stacking Protection support</strong>, która (przynajmniej teoretycznie) powinna utrudniać wykonywanie kodu przez <a href="http://pl.wikipedia.org/wiki/Przepełnienie_bufora">przepełnienie bufora</a>. Podnosi to (nieco) poziom bezpieczeństwa w przypadku próby wykorzystania przez atakującego tego typu błędów.</p>
<h3>Wybór pakietów</h3>
<p>Wybór pakietów jest najdłuższą czynnością. Na szczęście dla większości pakietów dostępny jest krótki opis. Mój <a href="http://www.burghardt.pl/files/openwrt-hurricane.config">plik konfiguracyjny dla ASUS WL-500g Premium</a> umieściłem tutaj jako referencję. Może on być użyty jako baza do dalszych eksperymentów albo bezpośrednio do zbudowania OpenWRT w wersji r13858.</p>
<h3>Zmiana limitu wielkości dla rootfs</h3>
<p>Domyślny limit wielkości obszaru rootfs jest zdefiniowany w <em>tools/firmware-utils/src/trx.c</em> i wynosi 0x5A0000 (<a href="https://dev.openwrt.org/ticket/2626">większość routerów ma mniej pamięci flash niż WL500GP</a>). W moim przypadku było to zbyt mało aby pomieścić wszystkie aplikacje, a ponieważ router bezproblemowo obsługuje większe rozmiary rootfs powiększyłem rootfs o 1MB. Poniżej patch:</p>
<div class="codecolorer-container diff default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="diff codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Index: tools/firmware-utils/src/trx.c<br />
===================================================================<br />
<span style="color: #888822;">--- tools/firmware-utils/src/trx.c &nbsp; &nbsp; &nbsp;<span style="">&#40;</span>wersja 13876<span style="">&#41;</span></span><br />
<span style="color: #888822;">+++ tools/firmware-utils/src/trx.c &nbsp; &nbsp; &nbsp;<span style="">&#40;</span>kopia robocza<span style="">&#41;</span></span><br />
<span style="color: #440088;">@@ -60,7 +60,7 @@</span><br />
<br />
&nbsp;#define TRX_MAGIC &nbsp; &nbsp; &nbsp;0x30524448 &nbsp; &nbsp; &nbsp;/* &quot;HDR0&quot; */<br />
&nbsp;#define TRX_VERSION &nbsp; &nbsp;<span style="">1</span><br />
<span style="color: #991111;">-#define TRX_MAX_LEN &nbsp; &nbsp;0x5A0000</span><br />
<span style="color: #00b000;">+#define TRX_MAX_LEN &nbsp; &nbsp;0x6A0000</span><br />
&nbsp;#define TRX_NO_HEADER &nbsp;<span style="">1</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* Do not write TRX header */<br />
<br />
&nbsp;struct trx_header <span style="">&#123;</span></div></div>
<h3>Sprzętowo wspomagana biblioteka OpenSSL</h3>
<p>Jeśli router posiada <strong>Sonics Silicon Backplane</strong> (ssb) i rdzeń IPSEC (<strong>Core 7 found: IPSEC (cc 0x80B, rev 0&#215;00, vendor 0&#215;4243)</strong>) warto w pliku <em>.config</em> włączyć:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CONFIG_PACKAGE_kmod-crypto-ocf=y<br />
CONFIG_PACKAGE_kmod-ocf-ubsec-ssb=y<br />
CONFIG_PACKAGE_ocf-crypto-headers=y</div></div>
<p>Oraz dodać do biblioteki OpenSSL opcję włączającą wsparcie dla <a href="http://ocf-linux.sourceforge.net/">OCF</a>:</p>
<div class="codecolorer-container diff default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="diff codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Index: package/openssl/Makefile<br />
===================================================================<br />
<span style="color: #888822;">--- package/openssl/Makefile &nbsp; &nbsp;<span style="">&#40;</span>wersja 13876<span style="">&#41;</span></span><br />
<span style="color: #888822;">+++ package/openssl/Makefile &nbsp; &nbsp;<span style="">&#40;</span>kopia robocza<span style="">&#41;</span></span><br />
<span style="color: #440088;">@@ -81,6 +81,8 @@</span><br />
&nbsp;define Build/Configure<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="">&#40;</span>cd $<span style="">&#40;</span>PKG_BUILD_DIR<span style="">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ./Configure linux-openwrt<br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --with-cryptodev</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --with-cryptodev-digests</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --prefix=/usr<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --openssldir=/etc/ssl<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="">&#40;</span>TARGET_CPPFLAGS<span style="">&#41;</span></div></div>
<p>Aplikacje używające libssl powinny teraz korzystać ze sprzętowej akceleracji operacji szyfrowania i haszowania. Aplikacje takie to m.in.: <a href="http://openvpn.net/">OpenVPN</a>, <a href="http://libtorrent.rakshasa.no/">rTorrent</a> i <a href="http://www.gnu.org/software/wget/">wget</a>. <a href="http://matt.ucc.asn.au/dropbear/dropbear.html">Dropbear</a> (domyślny serwer SSH w OpenWRT) nie korzysta z OpenSSL i dlatego nie jest wspomagany sprzętowo.</p>
<h2>Budowanie OpenWRT</h2>
<p>Aby pobrać wszystkie niezbędne do zbudowania OpenWRT pliki wydajemy polecenie (jeśli tego nie zrobimy pliki będą pobierane przed budowaniem każdego pakietu):</p>
<pre>
$ make download
</pre>
<p>Gdy wszystko jest już skonfigurowane wydajemy polecenie:</p>
<pre>
$ make world
</pre>
<p>W zależności od ilości wybranych pakietów, mocy obliczeniowej procesora i ilości pamięci RAM zbudowanie wszystkiego zajmie od kilku do kilkudziesięciu minut. Włączenie ccache przyspiesza budowanie w momencie gdy wprowadzimy niewielkie zmiany w konfiguracji i budujemy OpenWRT po raz kolejny.</p>
<h2>Instalacja OpenWRT na routerze</h2>
<p>Ta czynność jest bardzo prosta w przypadku WL-500gP. Po odłączeniu routera od zasilania wciskamy i trzymamy przycisk <strong>reset</strong>. Trzymając reset podłączamy zasilanie. Gdy dioda informująca o stanie zasilania zacznie migać zwalniamy przycisk reset. Podłączamy kabel Ethernet do portu LAN routera i do komputera.</p>
<p>Ustawiamy adres IP na interfejsie eth0:0 za pomocą komendy:</p>
<pre>
# ifconfig eth0:0 192.168.1.5 up
</pre>
<p>A następnie przechodzimy do katalogu <em>bin</em> i wydajemy polecenie:</p>
<pre>
$ atftp --trace --option "timeout 1" --option "mode octet" --put --local-file openwrt-brcm47xx-squashfs.trx 192.168.1.1
</pre>
<p>Czekamy do zakończenia kopiowania pliku. Po zakończeniu sesji tftp czekamy około 5 minut na zapisanie obrazu OpenWRT w pamięci flash i odłączamy zasilanie. Po ponownym podłączeniu zasilania router będzie bardzo długo startował ze względu na konieczność utworzenia obszaru <em>jffs2</em> i wygenerowania kluczy SSH routera.</p>
<h2>Konfiguracja OpenWRT</h2>
<p>Łączymy się z routerem za pomocą telnetu:</p>
<pre>
$ telnet 192.168.1.1
</pre>
<p>Następnie ustawiamy hasło:</p>
<pre>
# passwd
</pre>
<p>Ustawienie hasła uniemożliwia dalsze logowanie przez telnet. Od tej chwili należy używać wyłącznie SSH. Wylogowujemy się z routera i logujemy za pomocą SSH:</p>
<pre>
$ ssh root@192.168.1.1
</pre>
<h3>Wyłączanie niepotrzebnych usług</h3>
<p>Jeśli nie zamierzamy korzystać z serwera telnet i http możemy je wyłączyć:</p>
<pre>
# /etc/init.d/telnet disable
# /etc/init.d/httpd disable
</pre>
<h3>Nazwa hosta i strefa czasowa</h3>
<p>W <em>/etc/config/system</em> ustawiamy:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config system<br />
&nbsp; &nbsp; &nbsp; &nbsp; option hostname myrouter<br />
&nbsp; &nbsp; &nbsp; &nbsp; option timezone &quot;CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00&quot;</div></div>
<h3>Dropbear</h3>
<p>Aby włączyć logowanie wyłącznie za pomocą kluczy SSH zapisujemy w <em>/etc/dropbear/authorized_keys</em> nasz klucz publiczny, a następnie w <em>/etc/config/dropbear</em> ustawiamy:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; option PasswordAuth 'off'</div></div>
<h3>QoS</h3>
<p>Ustawiamy w <em>/etc/config/qos</em> przepływność interfejsu WAN:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">option upload 256<br />
option download 1024</div></div>
<p>Na początek pozostałe opcje warto pozostawić bez zmian.</p>
<h3>Thomson SpeedTouch 330, PPPoA i Neostrada</h3>
<p><a href="http://pl.wikipedia.org/wiki/Thomson_SpeedTouch_330">Thomson SpeedTouch 330</a> otrzymany od TP za 1 zł jest obsługiwany przez Linuksa. Pakiet z firmware również jest obecny w OpenWRT.</p>
<p>W przypadku <a href="http://pl.wikipedia.org/wiki/SAGEM_F@st_800">SAGEM F@st 800</a> OpenWRT posiada jedynie sterownik. Firmware należy skopiować ręcznie do katalogu <em>/lib/firmware/ueagle-atm</em> po zainstalowaniu OpenWRT.</p>
<p>Aby sprawdzić, czy po podłączeniu do portu USB routera modem został wykryty, oprogramowanie firmware załadowane, a synchronizacja ukończona pomyślnie wydajemy polecenie <strong>dmesg | tail</strong>. Powinniśmy zobaczyć taki komunikat:</p>
<pre>
speedtch 2-1:1.0: found stage 1 firmware speedtch-1.bin.4
speedtch 2-1:1.0: found stage 2 firmware speedtch-2.bin.4

ATM dev 0: ADSL line is synchronising
ATM dev 0: ADSL line is up (1312 kb/s down | 320 kb/s up)
</pre>
<p>Modem jest gotowy i możemy skonfigurować połączenie <a href="http://pl.wikipedia.org/wiki/PPP">PPP</a>. W tym celu ustawiamy w pliku <em>/etc/config/network</em> w sekcji <strong>WAN configuration</strong>:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config interface &nbsp; &nbsp; &nbsp; &nbsp;wan<br />
&nbsp; &nbsp; &nbsp; &nbsp; option ifname &nbsp; &quot;ppp0&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; option proto &nbsp; &nbsp;pppoa<br />
&nbsp; &nbsp; &nbsp; &nbsp; option encaps &nbsp; llc<br />
&nbsp; &nbsp; &nbsp; &nbsp; option vpi &nbsp; &nbsp; &nbsp;0<br />
&nbsp; &nbsp; &nbsp; &nbsp; option vci &nbsp; &nbsp; &nbsp;35<br />
&nbsp; &nbsp; &nbsp; &nbsp; option username &quot;XXXXXXX@neostrada.pl&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; option password &quot;XXXXXXXX&quot;</div></div>
<p>Aby nawiązać połączenie używamy:</p>
<pre>
# ifup wan
</pre>
<h3>IPv6</h3>
<p>Opcje połączenia IPv6 przez tunel w <a href="http://www.sixxs.net/">SixXS</a> definiujemy w <em>/etc/config/aiccu</em>. Konfiguracja <a href="http://www.litech.org/radvd/">radvd</a> znajduje się w <em>/etc/config/radvd</em>.</p>
<h3>OpenDNS</h3>
<p>Konfigurację <a href="/2009/01/openwrt-meets-opendns/">OpenDNS na OpenWRT</a> opisałem już wcześniej.</p>
<h2>Gdy 8MB pamięci flash to zbyt mało&#8230;</h2>
<p>Można do portu USB podłączyć dysk twardy USB lub bezgłośny Pendrive na którym można przechowywać pliki pobierane z Internetu. Można na nim również stworzyć partycję wymiany (co przyda się gdy będziemy chcieli uruchamiać więcej programów).</p>
<p>Konfiguracja dodatkowych nośników danych jest przechowywana w <em>/etc/config/fstab</em>. Przykładowa konfiguracja z pratycją <em>/home</em> na pliki uzytkownika, <em>/opt</em> na dodatkowe, niemieszczące się w pamięci flash routera aplikacje oraz partycją swap:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config mount home<br />
&nbsp; &nbsp; &nbsp; &nbsp; option target &nbsp; /home<br />
&nbsp; &nbsp; &nbsp; &nbsp; option device &nbsp; /dev/sda1<br />
&nbsp; &nbsp; &nbsp; &nbsp; option fstype &nbsp; ext3<br />
&nbsp; &nbsp; &nbsp; &nbsp; option options &nbsp;rw<br />
<br />
config mount opt<br />
&nbsp; &nbsp; &nbsp; &nbsp; option target &nbsp; /opt<br />
&nbsp; &nbsp; &nbsp; &nbsp; option device &nbsp; /dev/sda2<br />
&nbsp; &nbsp; &nbsp; &nbsp; option fstype &nbsp; ext3<br />
&nbsp; &nbsp; &nbsp; &nbsp; option options &nbsp;rw<br />
<br />
config swap<br />
&nbsp; &nbsp; &nbsp; &nbsp; option device &nbsp; /dev/sda3</div></div>
<h3>opkg-link</h3>
<p>Aby móc instalować pakiety na zewnętrznej pamięci dodajemy do <em>/etc/opkg.conf</em> linię:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dest usb /opt</div></div>
<p>Pakiety instalujemy na dysku USB poleceniem:</p>
<pre>
# opkg -d usb install nazwa_pakietu
</pre>
<p>Aby dodać link do pakietu w <em>/opt</em> w <em>/</em> możemy użyć skryptu opkg-link. Możemy go skopiować z <a href="http://wiki.openwrt.org/UsbStorageHowto">UsbStorageHowto</a> i zapisać jako <em>/bin/opkg-link</em>.</p>
<h2>Podsumowanie</h2>
<p>Nieźle jak na sprzęt za niecałe 400 zł (~300 zł router, 80 zł pendrive, 1zł modem DSL), co?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2009/01/openwrt-na-miare-naszych-mozliwosci-i-potrzeb/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>OpenWRT meets OpenDNS</title>
		<link>http://blog.burghardt.pl/2009/01/openwrt-meets-opendns/</link>
		<comments>http://blog.burghardt.pl/2009/01/openwrt-meets-opendns/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 00:52:52 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[OpenDNS]]></category>
		<category><![CDATA[OpenWRT]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=209</guid>
		<description><![CDATA[<p>To make whole home network use OpenDNS I need to change only 3 files on my OpenWRT router.</p> First step &#8211; resolv.conf <p>Create /etc/resolv.conf.opendns with OpenDNS servers addresses, eg:</p> nameserver 208.67.222.222 nameserver 208.67.220.220 <p>Make sure /etc/resolv.conf defines 127.0.0.1 as a name server.</p> Second step &#8211; dnsmasq <p>In /etc/config/dhcp set resolvfile variable:</p> option resolvfile '/etc/resolv.conf.opendns' <p>Restart [...]]]></description>
			<content:encoded><![CDATA[<p>To make whole home network use <a href="http://www.opendns.com/">OpenDNS</a> I need to change only 3 files on my <a href="http://www.openwrt.org/">OpenWRT</a> <a href="http://en.wikipedia.org/wiki/Router">router</a>.</p>
<h3>First step &#8211; resolv.conf</h3>
<p>Create <em>/etc/resolv.conf.opendns</em> with OpenDNS servers addresses, eg:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nameserver 208.67.222.222<br />
nameserver 208.67.220.220</div></div>
<p>Make sure <em>/etc/resolv.conf</em> defines 127.0.0.1 as a name server.</p>
<h3>Second step &#8211; dnsmasq</h3>
<p>In <em>/etc/config/dhcp</em> set resolvfile variable:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">option resolvfile '/etc/resolv.conf.opendns'</div></div>
<p>Restart <a href="http://en.wikipedia.org/wiki/Dnsmasq">dnsmasq</a> with:</p>
<pre>
# /etc/init.d/dnsmasq restart
</pre>
<p><span id="more-209"></span></p>
<h3>Third step &#8211; /etc/hotplug.d/iface</h3>
<p>This step is only needed if you have a <a href="http://en.wikipedia.org/wiki/IP_address#Static_and_dynamic_IP_addresses">dynamic IP address</a> and you want to use advanced OpenDNS features (like content filters or statistics).</p>
<p>Create file <em>/etc/hotplug.d/iface/40-opendns</em> with command similar to this:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${ACTION:-ifup}</span>&quot;</span> <span style="color: #000000; font-weight: bold;">in</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">ifup</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logger <span style="color: #660033;">-t</span> opendns <span style="color: #000000; font-weight: bold;">`</span>curl <span style="color: #660033;">-k</span> <span style="color: #660033;">-u</span> username:password https:<span style="color: #000000; font-weight: bold;">//</span>updates.opendns.com<span style="color: #000000; font-weight: bold;">/</span>nic<span style="color: #000000; font-weight: bold;">/</span>update?<span style="color: #007800;">hotsname</span>=NetworkName<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">esac</span></div></div>
<p>Note that you need curl built with (libopen)ssl.</p>
<p>Test hotplug script with:</p>
<pre>
# ifdown wan
# ifup wan
</pre>
<p>Then check log with:</p>
<pre>
# logread | tail
</pre>
<p>If script work you will see a message like:</p>
<pre>
Jan  4 01:13:27 hurricane user.notice opendns: good 83.10.94.104
</pre>
<p>Finally go to <a href="http://www.opendns.com">OpenDNS</a>. If everything is fine you should find green &#8220;You&#8217;re using OpenDNS!&#8221; in the right corner. In &#8220;Dashboard > Networks&#8221; you should find entry for NetworkName with your current IP and message &#8220;(your current IP)&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2009/01/openwrt-meets-opendns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web browser anonymity threats</title>
		<link>http://blog.burghardt.pl/2008/05/web-browser-anonymity-threats/</link>
		<comments>http://blog.burghardt.pl/2008/05/web-browser-anonymity-threats/#comments</comments>
		<pubDate>Tue, 13 May 2008 22:05:35 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[anonymity]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[proxy servers]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[web browser]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=81</guid>
		<description><![CDATA[<p>Anonymity in important for many people. Few years ago, it was problematic issue only for hackers, human rights workers and anonymity freaks. They want to keep they identity in secret for obvious reasons. They were traced only by law enforcement agencies and government. Today everything is much more difficult. Hundreds of advertising agencies trying to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eff.org/issues/anonymity">Anonymity</a> in important for many people. Few years ago, it was problematic issue only for hackers, human rights workers and anonymity freaks. They want to keep they identity in secret for obvious reasons. They were traced only by law enforcement agencies and government. Today everything is much more difficult. Hundreds of advertising agencies trying to reveal identity of people to target their commercials better.</p>
<p>Web browser can give them so many information. For example in which languages you speak (browser shares your language preferences with sites you visit)., in which city you live (this can be obtained from IP), how big is your computer display (web page can get your display resolution), what video player or office suite you have installed (they can query installed browser plugins) and much more...</p>
<p><span id="more-81"></span></p>
<h2>Server side</h2>
<p>Various information are available from <a href="http://en.wikipedia.org/wiki/PHP">PHP</a> and <a href="http://en.wikipedia.org/wiki/Apache HTTP Server">Apache</a>.</p>
<p>This include IP address, hostname (<a href="http://en.wikipedia.org/wiki/Reverse_DNS_lookup">reverse DNS lookup</a>), source port and sometimes user name:</p>
<pre>
Your IP: 38.107.179.239Your hostname: 38.107.179.239Your source port: 43079Your username: </pre>
<p>Those basic information are available from <strong>_SERVER</strong> <a href="http://en.wikipedia.org/wiki/Associative_array">associative array</a> members named <strong>REMOTE_ADDR</strong>, <strong>REMOTE_PORT</strong> and <strong>REMOTE_USER</strong>.</p>
<p>Here is an example how to get hostname quering DNS using <em>gethostbyaddr()</em>:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <a href="http://www.php.net/gethostbyaddr"><span style="color: #990000;">gethostbyaddr</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REMOTE_ADDR&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>In the same way we can obtain name and version of browser (<strong>HTTP_USER_AGENT</strong>). You are using:</p>
<pre>
CCBot/1.0 (+http://www.commoncrawl.org/bot.html)</pre>
<p><strong>HTTP_REFERER</strong> reveals site you come form. Currently:</p>
<pre>
</pre>
<p>We are able to check what browser accepts as a response (<strong>HTTP_ACCEPT</strong>, <strong>HTTP_ACCEPT_ENCODING</strong>, <strong>HTTP_ACCEPT_CHARSET</strong>):</p>
<pre>
HTTP_ACCEPT: text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5HTTP_ACCEPT_ENCODING: gzipHTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7</pre>
<p>Those settings may leak your language and, if you leave default settings, your browser identity.</p>
<h3>Proxy</h3>
<p>Proxy servers often adds new headers to those sent by browser. We can access them using <strong>HTTP_X_FORWARDED_FOR</strong> and <strong>HTTP_FORWARDED</strong> . Some proxy servers sets also headers like <strong>HTTP_CLIENT_IP</strong>, <strong>HTTP_VIA</strong>, <strong>HTTP_PROXY_CONNECTION</strong>, <strong>HTTP_XROXY_CONNECTION</strong>.</p>
<p>Currently they are set to:</p>
<pre>
X-Forwarded-For: Forwarded: Client-IP: Via: PROXY: XROXY: </pre>
<p>If none of above is set user is probably using direct connection. However some proxy servers (often called "high anonymous proxy" or "elite proxy") forward requests without adding any headers or even removing some headers that leaks browser identity.</p>
<h2>Client side</h2>
<p>Web browser may leak user identity to anyone who is able to run <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>. By default browsers run any script embedded into web page.</p>
<pre>
<script language="JavaScript">
jsver = "1.0";
</script><script language="JavaScript1.1">
jsver = "1.1";
</script><script language="JavaScript1.2">
jsver = "1.2";
</script><script language="JavaScript1.3">
jsver = "1.3";
</script><script language="JavaScript1.4">
jsver = "1.4";
</script><script language="JavaScript1.5">
jsver = "1.5";
</script><script language="JavaScript1.6">
jsver = "1.6";
</script><script language="JavaScript1.7">
jsver = "1.7";
</script><script language="JavaScript1.8">
jsver = "1.8";
</script><script language="JavaScript1.9">
jsver = "1.9";
</script><script language="JavaScript">document.write("JavaScript is <strong>enabled</strong> in your browser (version ", jsver, ")");</script><noscript>JavaScript is <strong>disabled</strong> in your browser.</noscript>
</pre>
<p>Browser identity is hold in <strong>navigator</strong> object. Its name is in <strong>navigator.appName</strong> Currently:</p>
<pre>
<script language="JavaScript">document.write(navigator.appName);</script><noscript>JavaScript disabled</noscript>
</pre>
<p>Browser code name (<strong>navigator.appCodeName</strong>):</p>
<pre>
<script language="JavaScript">document.write(navigator.appCodeName);</script><noscript>JavaScript disabled</noscript>
</pre>
<p>Browser version (<strong>navigator.appVersion</strong>):</p>
<pre>
<script language="JavaScript">document.write(navigator.appVersion);</script><noscript>JavaScript disabled</noscript>
</pre>
<p>Finally, platform it is running on (<strong>navigator.platform</strong>):</p>
<pre>
<script language="JavaScript">document.write(navigator.platform);</script><noscript>JavaScript disabled</noscript>
</pre>
<p>History length (or how many pages were visited - <strong>history.length</strong>):</p>
<pre>
<script language="JavaScript">document.write(history.length);</script><noscript>JavaScript disabled</noscript>
</pre>
<p>Screen size and dept is hold in <strong>screen</strong> object. Example code to obtain screen properties:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>screen.<span style="color: #660066;">width</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot; x &quot;</span><span style="color: #339933;">,</span>screen.<span style="color: #660066;">height</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; x &quot;</span><span style="color: #339933;">,</span> screen.<span style="color: #660066;">colorDepth</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; bpp (available for browser: &quot;</span><span style="color: #339933;">,</span> window.<span style="color: #660066;">screen</span>.<span style="color: #660066;">availWidth</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; x &quot;</span><span style="color: #339933;">,</span> window.<span style="color: #660066;">screen</span>.<span style="color: #660066;">availHeight</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Result of the above:</p>
<pre>
<script language="JavaScript">document.write(screen.width," x ",screen.height, " x ", screen.colorDepth, " bpp (available for browser: ", window.screen.availWidth, " x ", window.screen.availHeight, ")");</script><noscript>JavaScript disabled</noscript>
</pre>
<p>Referrer can be read from <strong>document.referrer</strong>:</p>
<pre>
<script language="JavaScript">document.write(document.referrer);</script><noscript>JavaScript disabled</noscript>
</pre>
<p>Using simple loop one can iterate trough installed plugins:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">plugins</span>.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> navigator.<span style="color: #660066;">plugins</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; plugin <span style="color: #339933;">=</span> navigator.<span style="color: #660066;">plugins</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>plugin.<span style="color: #000066;">name</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; (&quot;</span><span style="color: #339933;">,</span> plugin.<span style="color: #660066;">filename</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;)<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Result of above code:</p>
<pre>
<script language="JavaScript">
if (navigator.plugins.length) {
  for (i = 0; i < navigator.plugins.length; i++) {
    plugin = navigator.plugins[i];
    document.write(plugin.name, " (", plugin.filename, ")\n");
  }
}
</script><noscript>JavaScript disabled</noscript>
</pre>
<h3>Java</h3>
<p>If Java is enabled JavaScript can use Java VM to obtain more information from OS. <strong>navigator.javaEnabled()</strong> returns true or false if Java is enabled.</p>
<pre>
<script language="JavaScript">if (navigator.javaEnabled()) document.write("Java is enabled");else document.write("Java is disabled");</script><noscript>JavaScript is disabled. Unable to check availability of Java Runtime Environment.</noscript>
</pre>
<p>JavaScript with small help of Java can obtain client IP address with:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">javaEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; addr<span style="color: #339933;">=</span>java.<span style="color: #660066;">net</span>.<span style="color: #660066;">InetAddress</span>.<span style="color: #660066;">getLocalHost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; host<span style="color: #339933;">=</span>addr.<span style="color: #660066;">getHostName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; ip<span style="color: #339933;">=</span>addr.<span style="color: #660066;">getHostAddress</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>ip<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; (hostname: &quot;</span><span style="color: #339933;">,</span> host<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Results:</p>
<pre>
<script language="JavaScript">
if (navigator.javaEnabled()) {
  addr=java.net.InetAddress.getLocalHost();
  host=addr.getHostName();
  ip=addr.getHostAddress();
  document.write(ip, " (hostname: ", host, ")");
} else {
  document.write("Java disabled");
}
</script><noscript>JavaScript disabled. Unable to use Java Runtime Environment.</noscript>
</pre>
<p>Or with alternative version:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">javaEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; host<span style="color: #339933;">=</span> window.<span style="color: #660066;">location</span>.<span style="color: #660066;">host</span><span style="color: #339933;">;</span><br />
&nbsp; port<span style="color: #339933;">=</span>window.<span style="color: #660066;">location</span>.<span style="color: #660066;">port</span> <span style="color: #339933;">||</span> <span style="color: #CC0000;">80</span><span style="color: #339933;">;</span><br />
&nbsp; sock<span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> java.<span style="color: #660066;">net</span>.<span style="color: #660066;">Socket</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; sock.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> java.<span style="color: #660066;">net</span>.<span style="color: #660066;">InetSocketAddress</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'0.0.0.0'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; sock.<span style="color: #660066;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> java.<span style="color: #660066;">net</span>.<span style="color: #660066;">InetSocketAddress</span><span style="color: #009900;">&#40;</span>host<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>port<span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #CC0000;">80</span><span style="color: #339933;">:</span>port<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; addr<span style="color: #339933;">=</span>sock.<span style="color: #660066;">getLocalAddress</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; host<span style="color: #339933;">=</span>addr.<span style="color: #660066;">getHostName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; ip<span style="color: #339933;">=</span>addr.<span style="color: #660066;">getHostAddress</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>ip<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot; (hostname: &quot;</span><span style="color: #339933;">,</span> host<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Java disabled&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Results:</p>
<pre>
<script language="JavaScript">
if (navigator.javaEnabled()) {
  host= window.location.host;
  port=window.location.port || 80;
  sock=new java.net.Socket();
  sock.bind(new java.net.InetSocketAddress('0.0.0.0', 0));
  sock.connect(new java.net.InetSocketAddress(host, (!port)?80:port));
  addr=sock.getLocalAddress();
  host=addr.getHostName();
  ip=addr.getHostAddress();
  document.write(ip, " (hostname: ", host, ")");
} else {
  document.write("Java disabled");
}
</script><noscript>JavaScript disabled. Unable to use Java Runtime Environment.</noscript>
</pre>
<h3>Java applets</h3>
<p>Another possibility to obtain IP address of client is using <a href="http://en.wikipedia.org/wiki/Java_applet">Java applets</a>. Here is sample applet that tries to connect back to web server and reveal client address:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// &lt;applet code=&quot;ShowIP&quot; width=&quot;240&quot; height=&quot;30&quot;&gt;&lt;/applet&gt;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.applet.*</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.*</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.*</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ShowIP <span style="color: #000000; font-weight: bold;">extends</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aapplet+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Applet</span></a> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> m_ip<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_ip <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asocket+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Socket</span></a><span style="color: #009900;">&#40;</span>getDocumentBase<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getHost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, getDocumentBase<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getPort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getLocalAddress</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getHostAddress</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Exception</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m_ip <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;unknown&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> paint<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Agraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Graphics</span></a> g<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; g.<span style="color: #006633;">drawString</span><span style="color: #009900;">&#40;</span>m_ip, <span style="color: #cc66cc;">10</span>, <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Applet in action:<br />
<applet codebase="/wp-content/uploads/2008/04/" code="ShowIP" width="240" height="30"></applet></p>
<h3>ActiveX and other threats</h3>
<p><a href="http://en.wikipedia.org/wiki/ActiveX">ActiveX</a> object can reveal client identity, too. Fortunately AvtiveX works only in <a href="http://en.wikipedia.org/wiki/Internet_Explorer">Internet Explorer</a> on Windows. Maybe also Flash's Action Script can be used to achieve this. If you known any other possibilities let me known.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2008/05/web-browser-anonymity-threats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dostęp do Internetu przez telefon z Bluetooth i GPRS</title>
		<link>http://blog.burghardt.pl/2008/04/dostep-do-internetu-przez-telefon-z-bluetooth-i-gprs/</link>
		<comments>http://blog.burghardt.pl/2008/04/dostep-do-internetu-przez-telefon-z-bluetooth-i-gprs/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 15:41:11 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Polish]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[CSD]]></category>
		<category><![CDATA[GPRS]]></category>
		<category><![CDATA[ifscheme]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[Orange]]></category>
		<category><![CDATA[PPP]]></category>
		<category><![CDATA[pppd]]></category>
		<category><![CDATA[rfcomm]]></category>
		<category><![CDATA[telefon]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=89</guid>
		<description><![CDATA[<p>Wczorajsza awaria u mojego providera, która trwa do dziś (i podobno potrwa do 21:00) uświadomiła mi, że modemy kablowe to nie jedyny sposób łączenia się z Internetem. Większość współczesnych telefonów posiada interfejsy bezprzewodowe Bluetooth i IrDA oraz GPRS i CSD. Korzystając z komputera z adapterem Bluetooth (np. na USB) i telefonu możemy zestawić połączenie z [...]]]></description>
			<content:encoded><![CDATA[<p>Wczorajsza awaria u mojego <a href="http://pl.wikipedia.org/wiki/Internet_Service_Provider">providera</a>, która trwa do dziś (i podobno potrwa do 21:00) uświadomiła mi, że <a href="http://pl.wikipedia.org/wiki/Modem_kablowy">modemy kablowe</a> to nie jedyny sposób łączenia się z Internetem. Większość współczesnych telefonów posiada interfejsy bezprzewodowe <a href="http://pl.wikipedia.org/wiki/Bluetooth">Bluetooth</a> i <a href="http://pl.wikipedia.org/wiki/IrDA">IrDA</a> oraz <a href="http://pl.wikipedia.org/wiki/GPRS">GPRS</a> i <a href="http://pl.wikipedia.org/wiki/Circuit_Switched_Data">CSD</a>. Korzystając z komputera z adapterem Bluetooth (np. na <a href="http://pl.wikipedia.org/wiki/USB">USB</a>) i telefonu możemy zestawić połączenie z Internetem przez publiczny <a href="http://pl.wikipedia.org/wiki/Access_Point_Name">APN</a>. W Polsce każdy operator <a href="http://pl.wikipedia.org/wiki/GSM">GSM</a> posiada APN poprzez który można łączyć się z internetem.</p>
<p><span id="more-89"></span></p>
<p>Ponieważ używam systemu operacyjnego <a href="http://www.debian.org/">Debian GNU/Linux</a> i telefonu w sieci <a href="http://www.orange.pl/">Orange</a> poniższy opis będzie związany z konfiguracją w takim właśnie przypadku. Dla pozostałych operatorów i innych dystrybucji niektóre kroki będą inne, ale sposób konfiguracji nie powinien bardzo się różnić.</p>
<h2>Bluetooth</h2>
<p>Komputer i telefon komórkowy należy ze sobą sparować. Jest to krok konieczny, a sposób jego wykonania jest opisany w każdej instrukcji podłączania jakiegokolwiek urządzenia Bluetooth do komputera z Linuksem więc nie będę tego omawiał.</p>
<p>Gdy telefon i komputer komunikują się bez przeszkód należy poszukać kanału usługi portu szeregowego w telefonie. Wystarczy jeden port szeregowy. Możemy włączyć na chwilę "widoczność" telefonu i wydać komendę:</p>
<pre>
$ sdptool browse
</pre>
<p>Jeśli znamy adres sprzętowy naszego telefonu wystarczy podać go jako kolejny parametr (w tym przypadku urządzenie nie musi być "widoczne").</p>
<p>Naszym oczom ukaże się lista usług telefonu. Najbardziej interesujący na fragment wygląda tak:</p>
<pre>
Service Name: Serial Port
Service RecHandle: 0x10003
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 2
</pre>
<p>Teraz dopisujemy do pliki konfiguracyjnego <em>/etc/bluetooth/rfcomm.conf</em>:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rfcomm0 <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; bind yes<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; device <span style="color: #208080;">00</span><span style="color: #339933;">:??:??:??:??:??;</span> <span style="color: #339933;"># adres sprzętowy telefonu wyświetlony przez sdptool</span><br />
&nbsp; &nbsp; channel <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span> <span style="color: #339933;"># numer kanału wyświetlony przez sdptool dla portu szeregowego</span><br />
&nbsp; &nbsp; comment <span style="color: #ff0000;">&quot;Serial Port&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Restartujemy usługę bluetooth:</p>
<pre>
# invoke-rc.d --force bluetooth restart
</pre>
<p>Telefon będzie obsługiwany tak ja modem podłączony przez port szeregowy. Jako pliku urządzenia użyjemy <em>/dev/rfcomm0</em>.</p>
<h2>IrDA</h2>
<p>Dla połączeń IrDA plikiem urządzenia jest <em>/dev/ircomm0</em>. Po szczegóły konfiguracji odsyłam do <a href="http://irda.sourceforge.net/docs/">Linux-IrDA project</a>.</p>
<h2>CSD</h2>
<p>Choć pewnie wszyscy czekają na sposób konfiguracji połączeń GPRS zacznę od <a href="http://pl.wikipedia.org/wiki/Circuit_Switched_Data">CSD</a>. Łatwiej je skonfigurować i przetestować, a skonfigurowane już połączenie CSD łatwo przerobić na działające połączenie GPRS.</p>
<p>Połączenia CSD (tzw. "wdzwaniane") przesyłają dane protokołem <a href="http://pl.wikipedia.org/wiki/Point_to_Point_Protocol">PPP</a>. W systemie GNU/Linux za obsługe połączeń PPP odpowiada demon <strong>pppd</strong>.</p>
<h3>Konfiguracja pppd</h3>
<p>Aby skonfigurować pppd tworzymy w katalogu <em>/etc/ppp/peers</em> nowy plik opisujący połączenie (nazwałem go <em>orange-csd</em>) z następującą zawartością:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">user <span style="color: #ff0000;">&quot;internet&quot;</span><br />
connect <span style="color: #ff0000;">&quot;/usr/sbin/chat -v -f /etc/chatscripts/pap -T +48501808080&quot;</span><br />
<br />
<span style="color: #339933;">/</span>dev<span style="color: #339933;">/</span>rfcomm0<br />
<span style="color: #0000dd;">57600</span><br />
<br />
noipdefault<br />
usepeerdns<br />
defaultroute<br />
<br />
persist<br />
<br />
noauth</div></div>
<p>Jeśli nie korzystasz z sieci Orange, prawdopodobnie powinieneś zmienić login (pierwsza linia) i numer telefonu (druga linia) na właściwy dla danej sieci.</p>
<p>Następnie dla podanego w tym pliku loginu dopisujemy w pliku <em>/etc/ppp/chap-secrets</em> odpowiednie hasło. Dla Orange (hasło i login są takie same) będzie to linia:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">internet * internet *</div></div>
<p>W pliku <em>chap-secrets</em> cztery pola oznaczają po kolei: login, serwer, hasło i adres IP. Jeśli dostawca wymaga protokołu <a href="http://pl.wikipedia.org/wiki/Password_Authentication_Protocol">PAP</a> zamiast <a href="http://pl.wikipedia.org/wiki/Challenge_Handshake_Authentication_Protocol">CHAP</a> hasło wpisujemy do <em>/etc/ppp/pap-secrets</em>.</p>
<h3>Konfiguracja skryptów sieciowych</h3>
<p>Konfiguracja pppd jest niezależna od dystrybucji. Połączenie PPP możemy nawiązać poleceniem:</p>
<pre>
pppd call orange-csd
</pre>
<p>Jeśli chcemy aby ifup i ifdown obsługiwały również połączenia PPP należy zainstalować pakiet <strong>ifscheme</strong> i <strong>resolvconf</strong>, a następnie dopisać do <em>/etc/network/interfaces</em>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">iface ppp0 inet ppp<br />
mapping ppp0<br />
&nbsp; &nbsp; &nbsp; &nbsp; script ifscheme-mapping<br />
&nbsp; &nbsp; &nbsp; &nbsp; map orange-csd ppp0-orange-csd<br />
&nbsp; &nbsp; &nbsp; &nbsp; map orange-gprs ppp0-orange-gprs<br />
<br />
iface ppp0-orange-csd inet ppp<br />
&nbsp; &nbsp; &nbsp; &nbsp; provider orange-csd<br />
<br />
iface ppp0-orange-gprs inet ppp<br />
&nbsp; &nbsp; &nbsp; &nbsp; provider orange-gprs</div></div>
<p>Przełączanie pomiędzy trybem GPRS i CSD następuje poprzez wydanie jednego z poleceń:</p>
<pre>
# ifscheme orange-gprs
# ifscheme orange-csd
</pre>
<h2>GPRS</h2>
<p>Jeśli CSD działa (nie działa, albo pominęliśmy jego konfigurację - niepotrzebne skreślić) możemy skonfigurować telefon (o ile nigdy tego nie robiliśmy i nigdy nie korzystaliśmy z Internetu na telefonie np. przez program <a href="http://www.operamini.com/">Opera Mini</a>). Jeśli telefon kupiliśmy w salonie i nic nie zmienialiśmy powinien być już skonfigurowany. Po opis konfiguracji telefonu odsyłam na stronę operatora lub do instrukcji obsługi telefonu. Mając działające połączenie GPRS w telefonie możemy przystąpić do konfigurowania Linuksa.</p>
<h3>Konfiguracja pppd</h3>
<p>Konfiguracja pppd jest analogiczna jak dla CSD. Tworzymy plik <em>/etc/ppp/peers/orange-gprs</em> z następującą zawartością:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">user <span style="color: #ff0000;">&quot;internet&quot;</span><br />
connect <span style="color: #ff0000;">&quot;/usr/sbin/chat -v -f /etc/chatscripts/orange-gprs&quot;</span><br />
disconnect <span style="color: #ff0000;">&quot;/usr/sbin/chat -v -f /etc/chatscripts/orange-gprs-off&quot;</span><br />
<br />
<span style="color: #339933;">/</span>dev<span style="color: #339933;">/</span>rfcomm0<br />
<span style="color: #0000dd;">57600</span><br />
<br />
noipdefault<br />
usepeerdns<br />
defaultroute<br />
<br />
persist<br />
<br />
noauth</div></div>
<h3>Konfiguracja chat</h3>
<p>Połączenia CSD nie potrzebowały skryptów chat do konfiguracji telefonu. W przypadku GPRS jest inaczej. Konieczne jest wybranie konfiguracji telefonu i nazwy APN. Utwórzmy dwa skrypty. Pierwszy znich - <em>/etc/chatscripts/orange-gprs</em> połaczy nas z APN:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">TIMEOUT <span style="color: #0000dd;">10</span><br />
ECHO ON<br />
ABORT <span style="color: #ff0000;">&quot;NO CARRIER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO DIALTONE&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;ERROR&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO ANSWER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;BUSY&quot;</span><br />
<span style="color: #ff0000;">''</span> <span style="color: #ff0000;">'rATZ'</span><br />
OK AT<span style="color: #339933;">+</span>CGDCONT<span style="color: #339933;">=</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;IP&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;internet&quot;</span><br />
OK ATD<span style="color: #339933;">*</span><span style="color: #0000dd;">99</span><span style="color: #339933;">#</span><br />
CONNECT ``</div></div>
<p>Najważniejsza w tym skrypcie jest komenda AT+CGDCONT tworząca kontekst <a href="http://en.wikipedia.org/wiki/Packet_Data_Protocol">PDP</a>. Jej parametry to numer kontekstu (od 1 do 32), tryb pracy (do połączeń z Internetem będzie to "IP") oraz nazwa APN. Nazwa APN jest specyficzna dla sieci GPRS (operatora). Numer kontekstu jest istotny jedynie dla styku <a href="http://pl.wikipedia.org/wiki/Data_Terminating_Equipment">DTE</a>-<a href="http://pl.wikipedia.org/wiki/Data_Communications_Equipment">DCE</a> (komputer-telefon) i odpowiada on numerowi konfiguracji połączenia GPRS w telefonie.</p>
<p>Drugi - <em>/etc/chatscripts/orange-gprs-off</em> - będzie służył do rozłączania sesji GPRS:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ABORT <span style="color: #ff0000;">&quot;NO CARRIER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO DIALTONE&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;ERROR&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;NO ANSWER&quot;</span><br />
ABORT <span style="color: #ff0000;">&quot;BUSY&quot;</span><br />
<span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #ff0000;">&quot;K&quot;</span><br />
<span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #ff0000;">&quot;+++ATH&quot;</span></div></div>
<h3>Konfiguracja skryptów sieciowych</h3>
<p>Połączenie GPRS możemy zainicjować poleceniem:</p>
<pre>
pppd call orange-gprs
</pre>
<p>Konfiguracja <em>/etc/network/interfaces</em> jest identyczna jak w przypadku CSD.</p>
<h2>Podsumowanie</h2>
<p>Osoby używające innych dystrybucji powinny dostosować konfigurację do specyfiki dystrybucji. Konfiguracja pppd i chata nie wymaga poprawek (poza ścieżkami oczywiście, jeśli są inne należy je poprawić). Konfiguracja ifup i ifdown przyda się tylko w Debianie, <a href="http://www.ubuntu.com/">Ubuntu</a> i podobnych. Dla innych niż Orange sieci GSM zmienić należy numer telefonu dla CSD, numer konfiguracji telefonu oraz nazwę APN dla GPRS oraz login i hasło w obu przypadkach.</p>
<h3>Telefony</h3>
<p>Prędkość połączenia szeregowego została dobrana eksperymentalnie na zasadzie "najwyższa przy której jeszcze działa". Prawdopodobnie inne telefony mogą obsługiwać wyższe prędkości niż 57600. Stabilność połączenia podnosi również wyłączenie użycia protokołu <a href="http://en.wikipedia.org/wiki/Link_Control_Protocol">PPP Link Control Protocol (LCP)</a>:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lcp<span style="color: #339933;">-</span>echo<span style="color: #339933;">-</span>interval <span style="color: #0000dd;">0</span></div></div>
<p>W modelu Sony Ericsson T610 jest ona wręcz konieczna. Niektórzy polecają ustawienie jak najdłuższego czasu pomiędzy ramkami LCP (np. maksymalnego - 65535). Należy jednak pamiętać, że jest to czas (0 wyłącza użycie protokołu LCP). Długi czas co prawda, ale gdy upłynie modem i tak nas rozłączy. W połączeniu z opcją <strong>lcp-echo-failure 4</strong> będzie on cztery razy dłuższy, ale ryzyko rozłączenia jedynie odwlecze się w czasie (65535 sekund to około 18 godzin).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2008/04/dostep-do-internetu-przez-telefon-z-bluetooth-i-gprs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>WordPress na serwerze IdeaWebServer w home.pl</title>
		<link>http://blog.burghardt.pl/2008/03/wordpress-na-serwerze-ideawebserver-w-homepl/</link>
		<comments>http://blog.burghardt.pl/2008/03/wordpress-na-serwerze-ideawebserver-w-homepl/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 23:14:51 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Polish]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[IdeaWebServer]]></category>
		<category><![CDATA[redirect]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WWW]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/?p=82</guid>
		<description><![CDATA[<p>Dzisiejsza aktualizacja oprogramowania zarządzającego blogiem prawie się powiodła. WordPress 2.5 bezproblemowo zaktualizował strukturę bazy danych, a wszystkie wtyczki okazały się z nim współpracować. Niestety przy okazji trafiłem na inny problem. Autorski serwer WWW używany w home.pl (IdeaWebServer) jest prawie zgodny z Apache. Jak wiadomo &#8220;prawie czyni wielką różnicę&#8221;.</p> <p></p> <p>Niestety IdeaWebServer nie wysyła przeglądarce poprawnie [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiejsza aktualizacja oprogramowania zarządzającego blogiem prawie się powiodła. WordPress 2.5 bezproblemowo zaktualizował strukturę bazy danych, a wszystkie wtyczki okazały się z nim współpracować. Niestety przy okazji trafiłem na inny problem. Autorski serwer WWW używany w <a href="http://home.pl/">home.pl</a> (IdeaWebServer) jest prawie zgodny z <a href="http://pl.wikipedia.org/wiki/Apache_(serwer)">Apache</a>. Jak wiadomo &#8220;prawie czyni wielką różnicę&#8221;.</p>
<p><span id="more-82"></span></p>
<p>Niestety IdeaWebServer nie wysyła przeglądarce poprawnie <em>Location: /wp-admin/</em> o ile nie zaczyna się on nazwą protokołu i <a href="http://httpd.apache.org/docs/1.3/vhosts/">vhosta</a> (czyli <em>Location: http://blog.example.net/wp-admin/</em>). Zamiast przekierowania przeglądarka dostaje komunikat o błędzie numer 500 (Internal Server Error). Efekt? Próba zalogowania kończy się przykrym komunikatem. Podobnie wysłanie komentarza nie powoduje powrotu do komentowanej treści, a jedynie wyświetlenie informacji o błędzie.</p>
<p>Drobna poprawka w funkcji <em>wp_redirect()</em> rozwiązuje ten problem. Jeśli ktoś zamierza aktualizować WordPress w home.pl (a sądząc po <a href="http://www.google.com/search?q=wordpress+site%3Ahome.pl">ilości &#8220;wordpressów&#8221; wyszukiwanych przez Google w domenie home.pl</a> znajdą się tacy) proponuję zawczasu nałożyć patcha <a href="http://www.burghardt.pl/files/wordpress-home_pl.patch">wordpress-home_pl.patch</a>. Oprócz poprawki w <em>wp_redirect()</em> patch dodaje też rozpoznawanie serwera IdeaWebServer jako zgodnego z Apache (<a href="http://home.pl/pomoc/funkcje/htaccess/rewrite">poprawkę taką</a> proponuje home.pl).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2008/03/wordpress-na-serwerze-ideawebserver-w-homepl/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Paść się wikipédia równie ty&#8230;</title>
		<link>http://blog.burghardt.pl/2008/03/pasc-sie-wikipedia-rownie-ty/</link>
		<comments>http://blog.burghardt.pl/2008/03/pasc-sie-wikipedia-rownie-ty/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 12:07:45 +0000</pubDate>
		<dc:creator>Krzysztof Burghardt</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Polish]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://www.burghardt.pl/2008/03/pasc-sie-wikipedia-rownie-ty/</guid>
		<description><![CDATA[<p>Na polskojęzycznej liście dyskusyjnej Wikipedii pojawił się wątek na temat drukowania artykułów z Wikipedii. Pod adresem pl.lexisum.com umieszczona jest prosta strona umożliwiająca wydrukowania pierwszych akapitów z każdego artykułu polskojęzycznej Wikipedii. Gdyby to była jedynie zwykła strona renderująca artykuły z Wikipedii, w formie pozwalającej na ich proste wydrukowanie, nie wspomniał bym o niej.</p> <p>Za serce chwyta [...]]]></description>
			<content:encoded><![CDATA[<p>Na <a href="https://lists.wikimedia.org/mailman/listinfo/wikipl-l">polskojęzycznej liście dyskusyjnej Wikipedii</a> pojawił się wątek na temat <a href="http://lists.wikimedia.org/pipermail/wikipl-l/2008-March/026579.html">drukowania artykułów z Wikipedii</a>. Pod adresem <a href="http://pl.lexisum.com/">pl.lexisum.com</a> umieszczona jest prosta strona umożliwiająca wydrukowania pierwszych akapitów z każdego artykułu polskojęzycznej <a href="http://pl.wikipedia.org/">Wikipedii</a>. Gdyby to była jedynie zwykła strona renderująca artykuły z Wikipedii, w formie pozwalającej na ich proste wydrukowanie, nie wspomniał bym o niej.</p>
<p>Za serce chwyta napis tuż pod polem, w które należy wpisać nazwę artykułu. Brzmi on następująco:</p>
<blockquote><p>Paść się wikipédia równie ty typ i pozostawać odbicie twój kolega rezygnować przewyższać druki.</p></blockquote>
<p><span id="more-79"></span></p>
<p>A oto zrzut ekranu:</p>
<p><img src='/wp-content/uploads/2008/03/lexisum.png' alt='http://pl.lexisum.com/' /></p>
<p>W <a href="http://de.lexisum.com/">wersji niemieckiej</a> napis ten brzmi:</p>
<blockquote><p>Wikipédiabedeutet wie Sie schreiben und beeindrucken Sie Ihre Kollegen mit exzellentem Drucke.</p></blockquote>
<p>Wynik polecenia <em>whois lexisum.com</em>:</p>
<pre>
owner-fname: Peter
owner-lname: Dev
[...]
owner-city: Lisbon
</pre>
<p>Można zatem postawić tezę, że programy tłumaczące z języka portugalskiego na język polski są jeszcze w powijakach.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.burghardt.pl/2008/03/pasc-sie-wikipedia-rownie-ty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

