MacBook+USBワイヤレスLANアダプタで11nを11gに変換(GW-USMicroN)

ちょっとした集まりで「MacBook+USBワイヤレスLANアダプタ」で802.11n/ワイヤレスLANを802.11gに再共有しないといけないことがあります. 特にiPhone 3G802.11gまでなので(^^...

Mac OS X対応のUSB-ワイヤレスLANアダプタとMacBook/Proあれば問題なく再共有できるのですが、注意するのは、AirMacIF側のみステーションになれるのと、DHCP配布アドレス帯が10.0.2.0/24になることくらい.(ちなみに有線IF側にDHCP配布する場合は192.168.2.0/24帯)

        • -

以下そのメモです..

USB-ワイヤレスLANアダプタは、Ralinkチップはドライバーをベンダーが出しているので、バッファローアイオーデータでもいけそうだけど、ワタシは大きさとメーカーのMacOSX対応名言の心意気をかい(^^..プラネックスGW-USMicroNを利用してます.

iPhoneと較べてもかなりちいさい大きさでうっかりするとなしくしそう.

MacBookに差すとこんな感じ.

利用チップはRalink RT2870で、ドライバーはプラネックス社配布よりRalink社配布が新しく、こちらを利用.

Mac OS X 10.5対応だけどStartupItemsに登録されちゃうのは..まあいいか(^^
OS側はen2*として認識されます.

$ ifconfig en2
en2: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
        ether 00:90:cc:xx:xx:xx <-- プラネックスのOUI
...

あとはふつうに、共有パネル>インターネット共有 で、NAT+ipfwとbootpd(DHCP)とBINDとワイヤレスステーションの設定がされ利用できます.

        • -

いちおう確認しておくと..

$ ps ax
  574   ??  Ss     0:00.01 /usr/libexec/InternetSharing
...
  576   ??  Ss     0:00.28 /usr/sbin/natd -alias_address en2_IPaddress -interface en2 -use_sockets -same_ports -unregistered_only -dynamic -clamp_mss -enable_natportmap -natportmap_interface en1
...
  577   ??  Ss     0:00.01 /usr/libexec/bootpd -P
...
  578   ??  S      0:00.02 /usr/sbin/named -c /etc/com.apple.named.conf.proxy -f
...

# ipfw -a show
00010 3582 1468195 divert 8668 ip from any to any via en1
65535 5012 1588674 allow ip from any to any
#

$ sysctl -a
...
net.inet.ip.forwarding: 1
...

$ cat /Library/Preferences/SystemConfiguration/com.apple.nat.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>NAT</key>
        <dict>
                <key>AirPort</key>
                <dict>
                        <key>40BitEncrypt</key>
                        <integer>0</integer>
                        <key>Channel</key>
                        <integer>0</integer>
                        <key>Enabled</key>
                        <integer>1</integer>
                        <key>Extreme</key>
                        <string></string>
                        <key>NetworkName</key>
                        <string>myESSID</string>
                        <key>NetworkPassword</key>
                        <data>
                        ...
                        </data>
                </dict>
                <key>Enabled</key>
                <integer>1</integer>
                <key>PrimaryInterface</key>
                <dict>
                        <key>Device</key>
                        <string>en2</string>
                        <key>Enabled</key>
                        <integer>0</integer>
                        <key>HardwareKey</key>
                        <string></string>
                        <key>PrimaryUserReadable</key>
                        <string>USB Ethernet(en2)</string>
                </dict>
                <key>PrimaryService</key>
                <string>...</string>
                <key>SharingDevices</key>
                <array>
                        <string>en1</string>
                </array>
        </dict>
</dict>
</plist>
$ 


$ cat /etc/bootpd.plist 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Subnets</key>
        <array>
                <dict>
                        <key>_creator</key>
                        <string>com.apple.nat</string>
                        <key>allocate</key>
                        <true/>
                        <key>dhcp_domain_name_server</key>
                        <string>10.0.2.1</string>
                        <key>dhcp_router</key>
                        <string>10.0.2.1</string>
                        <key>lease_max</key>
                        <integer>3600</integer>
                        <key>lease_min</key>
                        <integer>3600</integer>
                        <key>name</key>
                        <string>10.0.2</string>
                        <key>net_address</key>
                        <string>10.0.2.0</string>
                        <key>net_mask</key>
                        <string>255.255.255.0</string>
                        <key>net_range</key>
                        <array>
                                <string>10.0.2.2</string>
                                <string>10.0.2.254</string>
                        </array>
                </dict>
        </array>
        <key>bootp_enabled</key>
        <false/>
        <key>detect_other_dhcp_server</key>
        <integer>1</integer>
        <key>dhcp_enabled</key>
        <array>
                <string>en1</string>
        </array>
        <key>reply_threshold_seconds</key>
        <integer>4</integer>
</dict>
</plist>
$


$ cat /etc/com.apple.named.conf.proxy
...
options {
...
        listen-on { 10.0.2.1;  };
        forward first;
        forwarders { en2_IPaddress;  };
};
...


というカンジ.

...またどうしてもDHCP配布アドレス帯バッティングして__テンポラリ利用の場合(クライアントもPCの場合)__は、DHCP配布あきらめて、AirMacIF(en1)に適当なIPアドレス割り当てて(もちろんWirelessクライアントもIP/DNS手動設定で)利用することもできてます.(ちなみにAirMac側でDHCPサーバ動かさないならcom.apple.nat.plistのSharingNetworkNumberStart書くとaliasでIFに与えられてうまくゆきます. SnowLeopardでAirMac側でもできることに期待!)

たとえば以下10.0.2.0/24 -> 172.16.1.0/24に変えるばあい.
ホスト側は

wl-host# ifconfig en1 alias 172.16.1.1 netmask 0xffffff00 broadcast 172.16.1.255 <-- こっちに割当て
wl-host# ifconfig en1 -alias 10.0.2.1 netmask 0xffffff00 broadcast 10.0.2.255

wl-host$ ifconfig en1 <-- いちおう確認..
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
       inet 172.16.1.1 netmask 0xffffff00 broadcast 172.16.1.255
...

wl-host$ netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            Upper-GW        UGSc       41     2350    en2
127                127.0.0.1          UCS         0        0    lo0
127.0.0.1          127.0.0.1          UH          1        2    lo0
169.254            link#5             UCS         0        0    en2
169.254.111.106    127.0.0.1          UHS         0        0    lo0
172.16.1/24        link#7             UC          2        0    en1
172.16.1.1         en2-HWaddress    UHLW        0        4    lo0
172.16.1.2         en2-wl-clientHWAddress   UHLW        0     2003    en1   1075
en2-network          link#5             UCS         2        0    en2
Upper-GW        0:a0:de:28:5b:a9   UHLW       48      286    en2   1197
en2-Address        127.0.0.1          UHS         0        0    lo0
...


クライアント側は..

wl-client# ifconfig en1 alias 172.16.1.2 netmask 0xffffff00 broadcast 172.16.1.255 <-- こっちに割当て
wl-client# ifconfig en1 -alias 10.0.2.2 netmask 0xffffff00 broadcast 10.0.2.255

wl-clien$ ifconfig en1 <-- いちおう確認..
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
       inet 172.16.1.2 netmask 0xffffff00 broadcast 172.16.1.255
...

wl-client# route change -net 0.0.0.0 172.16.1.1 <-- 経路かえて..
change net 0.0.0.0 gateway 172.16.1.1
wl-client# route delete -host 10.0.2.2 127.0.0.1 <-- 残ってたので..

wl-clien$ netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            172.16.1.1         UGSc        5       18    en1
10.0.2.4           127.0.0.1          UHS         0        0    lo0
127                127.0.0.1          UCS         0        0    lo0
127.0.0.1          127.0.0.1          UH          0        0    lo0
169.254            link#5             UCS         0        0    en1
172.16.1/24        link#5             UC          1        0    en1
172.16.1.1         en1-HWaddress    UHLW        2      223    en1    969

で..

wl-client$ dig @208.67.222.222 www.apple.com <-- いちお確認..DNSサーバは適当に..
...
;; ANSWER SECTION:
www.apple.com.          352     IN      CNAME   www.apple.com.akadns.net.
www.apple.com.akadns.net. 14    IN      A       17.251.200.32
...

wl-client$ telnet 17.251.200.32 80 <-- いちお確認..こっちも適当に..
Trying 17.251.200.32...
Connected to cup-www.apple.com.
Escape character is '^]'.
GET /

.....

とかできてます.

参考>
InternetSharing(8)
http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man8/InternetSharing.8.html

NATD(8)
http://developer.apple.com/documentation/Darwin/Reference/Manpages/man8/natd.8.html

IPFW(8)
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/ipfw.8.html

SYSCTL(3)
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/sysctl.3.html

BOOTPD(8)
http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man8/bootpd.8.html

NAMED(8)
developer.apple.com/documentation/Darwin/Reference/ManPages/man8/ named.8.html

NAMED.CONF(5)
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/named.conf.5.html

プラネックス GW-USMicroN
http://www.planex.co.jp/product/wireless/gw-usmicron/

ドライバー
-Ralink RT2870
http://www.ralinktech.com/ralink/data/RT2800.pdf
-ドライバー(RT2870)
http://www.ralinktech.com/ralink/Home/Support/Macintosh.html


これでお気楽ご気楽...


追補:
RT2870のトライバーばv3になってました.

  • ドライバー(RT2870)

http://www.ralinktech.com/support.php?s=3


Mac OS X 10.5.4 Leopard

Mac OS X 10.5.4 Leopard

Apple MacBook 2.0GHz 13.3インチ MB466J/A

Apple MacBook 2.0GHz 13.3インチ MB466J/A