2014年7月13日日曜日

フリーアクセスポイント firmware

http://www.bsdguides.org/2012/a-wireless-access-point-hotspot-using-openbsd/
のとおりですが 解説します。
Linuxとちがって hostapd のような ツールはつかいません。
      ( http://netbuffalo.doorblog.jp/archives/3895783.html)
原理がシンプルです。

まず概要です

インターネット

ルーター
192.168.100.254

|有線

fxp0  (DHCP client) :ありきたりのNIC
OpenBSD
rum0  (DHCPD server):ありきたりのwifi無線子機

|無線

wifiで通信できるPC達


つまり、OpenBSDマシンが PC達にアドレスを出し 、そして natでインターネットにつれだして くれます。

まず natをする pf の firewall です。

 cat /etc/pf.conf
###################
ext=fxp0

icmp_types = "{echoreq, unreach}"
set block-policy return
set loginterface $ext
set skip on lo0

# to some packet scrubbing
match in all scrub (no-df max-mss 1440)

# Handles NAT for the wireless clients
match out on $ext inet from !($ext:network) to any nat-to ($ext:0)

# Block everything by default
block log all

# Let all traffic out
pass out quick

# Let all traffic in
# allowing 'gre' is useful to allow PPTP VPN traffic
pass in quick inet proto { tcp udp gre } from any to any
pass in quick inet proto icmp all icmp-type $icmp_types keep state

これで PC達が firewallを とおりぬけられるようになります。



アドレスを配るため
# cat  /etc/hostname.rum0
cat: /etc/hostname.rum0: No such file or directory



/etc/hostname.rum0はつまり ないのです。
これは あと でのべるシェルスクリプトで SSIDをあてていきます。
お楽しみに


 cat /etc/dhcpd.interfaces

rum0




cat /etc/dhcpd.conf
option  domain-name "my.domain";
option  domain-name-servers 192.168.100.254;
subnet 192.168.12.0 netmask 255.255.255.0 {
        option routers 192.168.12.1;

        range 192.168.12.2 192.168.12.7;


}



 # cat /etc/hostname.fxp0

dhcp




で問題のシェルスクリプトです。

# cat free-accesspoint.bat
これは SSIDが emi で パスワードなしです。
ifconfig rum0 inet 192.168.12.1 netmask 255.255.255.0 \
media autoselect mediaopt hostap nwid emi \
chan 1 up




# cat id-accesspoint.bat
これは SSIDが aaでパスワードが 123456789で保護されてます。
ifconfig rum0 \
 inet    192.168.12.1   netmask 255.255.255.0 \
media autoselect mediaopt hostap nwid aa \
wpakey 123456789 chan 1 up

以上です。


http://archive09.linux.com/feature/49990のように、
 Configuring a wireless adapter to act as an access point in OpenBSD is a simple matter of creating /etc/hostname.ral0 (replace ral0 with your adapter's interface):

# /etc/hostname.ral0
inet 192.168.2.254 255.255.255.0 NONE  ¥

media autoselect mediaopt hostap mode 11g nwid my_secure ¥
chan 11
and issuing the command
sh /etc/netstart ral0 as root.
を参考にして試みてください。



openbsdは 厳密なので
I-O DATA IEEE802.11n/g/b準拠 300Mbps(規格値) 無線LANアダプター WN-G300UA は、最初はあきまへん。

   なお GW-US54Mini2W rum0はいけてます。      安いバファローのwli-uc-gnmは run0でなにもせずに動きますが熱い。

ただし、 PCIのurtwnは
lftp firmware.openbsd.org:/firmware> cd 5.5
cd: received redirection to `http://firmware.openbsd.org/firmware/5.5/'
cd ok, cwd=/firmware/5.5
lftp firmware.openbsd.org:/firmware/5.5> ls
drwxr-xr-x  --  ..
-rw-r--r--  --  acx-firmware-1.4p4.tgz
-rw-r--r--  --  athn-firmware-1.1p1.tgz
-rw-r--r--  --  bwi-firmware-1.4p3.tgz
-rw-r--r--  --  ipw-firmware-1.3p2.tgz
-rw-r--r--  --  iwi-firmware-3.1p2.tgz
-rw-r--r--  --  iwn-firmware-5.10p0.tgz
-rw-r--r--  --  malo-firmware-1.4p3.tgz
-rw-r--r--  --  otus-firmware-1.0p1.tgz
-rw-r--r--  --  pgt-firmware-1.2p3.tgz
-rw-r--r--  --  radeondrm-firmware-20131002p0.tgz
-rw-r--r--  --  rsu-firmware-1.2p0.tgz
-rw-r--r--  --  uath-firmware-2.0p1.tgz
-rw-r--r--  --  ulpt-firmware-1.0p0.tgz
-rw-r--r--  --  upgt-firmware-1.1p3.tgz
-rw-r--r--  --  urtwn-firmware-1.1p2.tgz
-rw-r--r--  --  uvideo-firmware-1.2p1.tgz
-rw-r--r--  --  wpi-firmware-3.2p1.tgz

して urtwn-firmware-1.1p2.tgz を解凍したものを
/etc/firmwareにコピーするとできると 識者は書いてます。
確かに認識してくれるようになりました。

なお wifi子機については
/usr/share/man/man4/rum.4
/usr/share/man/man4/run.4  
なあたりにいろいろ書かれてます

ここからは  話が混み合ってきます。
少しだけ 創造性を付与します。

上の 0penBSDが 有線と無線のDHCPDサーバーになる場合です。
2つのinterfaceにそれぞれ dhcpdを回す必要があります。

それで
有線の方は openbsd本来のDHCPDにまかせて、

無線の方は isc-dhcp-serverに任せましょう。

そうなると 上の方で有線は

internet
|
|

rouer


sis0 (dhcp client)
opensd rum0(dhcpd server)-----wireless-----
ne3(dhcpd server)

|
|
|wirred


有線は

cat /etc/hostname.ne3                                                                           
inet 192.168.11.1 255.255.255.0

cat /etc/dhcpd.interfaces                                                                       
ne3
 

cat /etc/dhcpd.conf                                                                             
option  domain-name "my.domain";
option  domain-name-servers 192.168.1.1;
subnet 192.168.11.0 netmask 255.255.255.0 {
        option routers 192.168.11.1;

        range 192.168.11.2 192.168.11.7;
}

と 既存のものにまったく手をつけません。

ーーー 

 

無線は

# cat  /etc/hostname.rum0

cat: /etc/hostname.rum0: No such file or directory
つまりなし。


で 無線へのDHCPDは、
 isc-dhcpdを利用します。

 cat /usr/local/share/examples/isc-dhcp/dhcpd.conf

default-lease-time 600;
max-lease-time 7200;
log-facility local7;
# A slightly different configuration for an internal subnet.
subnet 192.168.100.0 netmask 255.255.255.0 {
  range  192.168.100.101 192.168.100.109  ;
  option domain-name-servers 192.168.1.1;
  #option domain-name "internal.example.org";
  option routers 192.168.100.1 ;
  #option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
}


そうしておいて
/usr/local/sbin/dhcpd   rum0    -cf  /usr/local/share/examples/isc-dhcp/dhcpd.conf
でアドレスを割り当てれる体勢にしておいて
つづいて次のコマンドをうてばいいのではないかと 予想されます。



# cat free-accesspoint.bat
これは SSIDが emi で パスワードなしです。
ifconfig rum0 inet 192.168.100.1 netmask 255.255.255.0 \
media autoselect mediaopt hostap nwid emi \
chan 1 up


# cat id-accesspoint.bat
これは SSIDが aaでパスワードが 123456789で保護されてます。
ifconfig rum0 inet 192.168.100.1  netmask 255.255.255.0 \
media autoselect mediaopt hostap nwid aa \
wpakey 123456789 chan 1 up



ここまで進むと OpenBSDのTheoの元で統制のとれた すっきりとしたOSの整然としたシンプルで美しい姿が見えてきます。
おそらく 進んでいくと linuxを openbsdが抜いてしまうかもしれません。
足元の安定度合いの差です。
砂上の楼閣。

コンパイルしておもったのは 腕のいい良い大工の親方をたくさん連れていなければ家がたつのが遅いと思いました。
CPUが親方で メモリがその弟子 ってかんじでしょうか


これからは今までかいてたものの証明にあたります。
全体はつぎです


internet
|
|wireless
|
Uroad-aero
192.168.100.254
|
|wireless
|
run0
OpenBSD (live USB 2GB) bge0(192.168.11.1)----wired LAN----PC
rum0 (WIFI free access point)
|
|woreless
|
PC

つまりOpenBSD (live USB 2GB) は
2つのdhcpdをまわします。
1つは openbsd本来のdhcpdと もう一つは上に述べた iscのdhcpdです・

 openbsd本来のdhcpdほうは

cat /etc/dhcpd.interfaces
run0


cat /etc/dhcpd.conf
option  domain-name "my.domain";
option  domain-name-servers 192.168.100.254;
#.3, 192.168.1.5;
subnet 192.168.11.0 netmask 255.255.255.0 {
        option routers 192.168.11.1;
        range 192.168.11.2 192.168.11.7;
}




iscのdhcpdはスクリプトで後でまわします。
で これは後述します。



他の設定ファイルは
cat /etc/hostname.run0
nwid URoad-662EA0
wpakey 0271
dhcp
 


cat /etc/hostname.bge0
inet 192.168.11.1 255.255.255.0


cat /etc/hostname.rum0
inet 192.168.200.1 255.255.255.0 NONE \
media autoselect mediaopt hostap mode 11g nwid myFreeAP \
chan 1
 

それから cat /etc/pf.conf
ext=run0

icmp_types = "{echoreq, unreach}"
set block-policy return
set loginterface $ext
set skip on lo0

# to some packet scrubbing
match in all scrub (no-df max-mss 1440)

# Handles NAT for the wireless clients
match out on $ext inet from !($ext:network) to any nat-to ($ext:0)

# Block everything by default
block log all

# Let all traffic out
pass out quick

# Let all traffic in
# allowing 'gre' is useful to allow PPTP VPN traffic
pass in quick inet proto { tcp udp gre } from any to any
pass in quick inet proto icmp all icmp-type $icmp_types keep state





こうしてから

 cat /root/free-ISC.batB
/usr/local/sbin/dhcpd rum0 -cf /usr/local/share/examples/isc-dhcp/dhcpd.conf

のスクリプトをまわすと free wifi acsess pointができます。

なお
cat  /usr/local/share/examples/isc-dhcp/dhcpd.conf
 

#option domain-name "example.org";
option domain-name-servers 192.168.100.254;
#ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
# This is a very basic subnet declaration.
subnet 192.168.200.0 netmask 255.255.255.0 {
  range 192.168.200.10 192.168.200.20;
  option routers 192.168.200.1;
}


です。



 /usr/local/sbin/dhcpd rum0 -cf /usr/local/share/examples/isc-dhcp/dhcpd.conf
 する前は

  ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33192
        priority: 0
        groups: lo
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:1e:c9:05:78:fc
        priority: 0
        media: Ethernet autoselect (100baseTX full-duplex,rxpause,txpause)
        status: active
        inet 192.168.11.1 netmask 0xffffff00 broadcast 192.168.11.255
        inet6 fe80::21e:c9ff:fe05:78fc%bge0 prefixlen 64 scopeid 0x1
enc0: flags=0<>
        priority: 0
        groups: enc
        status: active
urtwn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:22:cf:ec:c8:05 <ー以前はrun0でした
        priority: 4
        groups: wlan egress
        media: IEEE802.11 autoselect (OFDM54 mode 11g)
        status: active
        ieee80211: nwid URoad-662EA0 chan 2 bssid 00:1d:93:66:2e:a0 178dB wpakey 0x80d48807c087a4cacbbc320ae43060ea4968c557eb3617f79938b64814467a82 wpaprotos wpa1,wpa2 wpaakms psk wpaciphers tkip,ccmp wpagroupcipher tkip
        inet6 fe80::222:cfff:feec:c805%urtwn0 prefixlen 64 scopeid 0x4
        inet 192.168.100.104 netmask 0xffffff00 broadcast 192.168.100.255
rum0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:22:cf:01:22:6f
        priority: 4
        groups: wlan
        media: IEEE802.11 autoselect mode 11g hostap
        status: active
        ieee80211: nwid my_FreeAP chan 1 bssid 00:22:cf:01:22:6f 100dBm
        inet 192.168.200.1 netmask 0xffffff00 broadcast 192.168.200.255
        inet6 fe80::222:cfff:fe01:226f%rum0 prefixlen 64 scopeid 0x5
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33192
        priority: 0
        groups: pflog



 /usr/local/sbin/dhcpd rum0 -cf /usr/local/share/examples/isc-dhcp/dhcpd.conf
すると
 Internet Systems Consortium DHCP Server 4.2.5-P1
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
/var/db/dhcpd.leases line 2: Time zone offset or semicolon expected.
        starts 6 2014/07/19 05:16:10 UTC;
                                      ^
/var/db/dhcpd.leases line 3: Time zone offset or semicolon expected.
        ends 6 2014/07/19 17:16:10 UTC;
                                    ^
lease 192.168.11.2: no subnet.
/var/db/dhcpd.leases line 9: Time zone offset or semicolon expected.
        starts 6 2014/07/19 05:25:35 UTC;
                                      ^
/var/db/dhcpd.leases line 10: Time zone offset or semicolon expected.
        ends 6 2014/07/19 17:25:35 UTC;
                                    ^
lease 192.168.11.2: no subnet.
Wrote 0 leases to leases file.
Listening on BPF/rum0/00:22:cf:01:22:6f/192.168.200.0/24
Sending on   BPF/rum0/00:22:cf:01:22:6f/192.168.200.0/24
Sending on   Socket/fallback/fallback-net

なメッセージがでて

ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33192
        priority: 0
        groups: lo
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:1e:c9:05:78:fc
        priority: 0
        media: Ethernet autoselect (100baseTX full-duplex,rxpause,txpause)
        status: active
        inet 192.168.11.1 netmask 0xffffff00 broadcast 192.168.11.255
        inet6 fe80::21e:c9ff:fe05:78fc%bge0 prefixlen 64 scopeid 0x1
enc0: flags=0<>
        priority: 0
        groups: enc
        status: active
urtwn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:22:cf:ec:c8:05
        priority: 4
        groups: wlan egress
        media: IEEE802.11 autoselect (OFDM54 mode 11g)
        status: active
        ieee80211: nwid URoad-662EA0 chan 2 bssid 00:1d:93:66:2e:a0 178dB wpakey 0x80d48807c087a4cacbbc320ae43060ea4968c557eb3617f79938b64814467a82 wpaprotos wpa1,wpa2 wpaakms psk wpaciphers tkip,ccmp wpagroupcipher tkip
        inet6 fe80::222:cfff:feec:c805%urtwn0 prefixlen 64 scopeid 0x4
        inet 192.168.100.104 netmask 0xffffff00 broadcast 192.168.100.255
rum0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:22:cf:01:22:6f
        priority: 4
        groups: wlan
        media: IEEE802.11 autoselect mode 11g hostap
        status: active
        ieee80211: nwid my_FreeAP chan 1 bssid 00:22:cf:01:22:6f 100dBm
        inet 192.168.200.1 netmask 0xffffff00 broadcast 192.168.200.255
        inet6 fe80::222:cfff:fe01:226f%rum0 prefixlen 64 scopeid 0x5
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33192
        priority: 0
        groups: pflog

になります。

一応xdmは動かしてます。 

 pkg_infoは
bzip2-1.0.6p0       block-sorting file compressor, unencumbered
gettext-0.18.2p4    GNU gettext
isc-dhcp-server-4.2.5.1p0 ISC DHCP Server
lftp-4.4.10         shell-like command line ftp and sftp client
libiconv-1.14p1     character set conversion library
libidn-1.28p0       internationalized string handling
nano-2.2.6          Pico editor clone with enhancements
pcre-8.33           perl-compatible regular expression library
quirks-1.113        exceptions to pkg_add rules
readline-6.2pl4     library to edit command lines as they are typed in
wget-1.15           retrieve files from the web via HTTP, HTTPS and FTP

ですが、2GのUSBメモリで

xterm -fn  10x20
で動かせば、文字がおおきくなり ktermは不要です。


 ついでに seamonkey anthy ibus ibus-anthyもいれました。
rootだけでログインするつもりなので
cat /root/.xsession
cat: /root/.xsession: No such file or directory
ないのです。
でも 
terminalで
/usr/local/bin/ibus-daemon -d -x -r
したら 日本語入力可能です。
これで 2Gのメモリで
df
Filesystem  512-blocks      Used     Avail Capacity  Mounted on
/dev/sd1a      3571580   2350500   1042504    69%    /

load averages:  0.12,  0.31,  0.49                       hoo.my.domain 06:53:07
50 processes: 49 idle, 1 on processor
CPU states:  0.0% user,  0.0% nice,  0.0% system, 32.9% interrupt, 67.1% idle
Memory: Real: 163M/326M act/tot Free: 157M Cache: 96M Swap: 0K/133M
の負荷です。



わずか 2GBのUSBメモリで openBSDがうごき
有線の nat箱と
無線の wifiアクセスポイントをかねてくれてます。
ちょっと OpenBSD凄いです。





0 件のコメント:

コメントを投稿