作ります
イーサネットコンバータ
無線LANの電波を有線に変換するやつ(適当)
公衆無線LANをイーサネットコンバータで有線ネットワークにつなげると嬉しいね、みたいな。 てかこれルータじゃないか?
準備
突然ですがArchLinuxは神です。 とりあえずRaspiにArchLinuxARMを入れます。
x86_64の一般的なやつと比べるとインスコ難易度は低めです。
ここのInstallationをみましょう
なんかmacOSでやろうとしたら詰んだので、Linux上でやることをオススメします。 ボクはArchLinux(x86_64) on VirtualBox on macOSでやったんですが、非常に闇だったのでおすすめしません。 Windowsは知りません。ガンバッテ。
ちなみにx86_64版のインストールはこの記事がわかりやすいですね!!11
設定
IPを固定しよう
先にLAN側をやりましょう。
今回は10.0.0.0/24
なネットワークを作ってみます。 ArchLinuxは神なのでnetctlっていう神ツールが入っています。
この設定ファイル/etc/netctl/eth0
を書いて、
Interface=eth0
Connection=ethernet
IP=static
Address=('10.0.0.1/24')
# netctl start eth0
# netctl enable eth0
こんなかんじ。 自分のIPアドレスは10.0.0.1
にしました。
DHCP/DNSサーバになろう
市販のルーターにはだいたいついてるDHCP/DNS機能ですが、dnsmasqってのがありまして、この人がこの2つを兼任してくれます。
とりあえずインストール
# pacman -S dnsmasq
で、設定ファイル/etc/dnsmasq.conf
に追記します。
interface=eth0
bind-interfaces
dhcp-range=10.0.0.2,10.0.0.254,2h
dhcp-option=option:netmask,255.255.255.0
dhcp-option=option:router,10.0.0.1
dhcp-option=option:dns-server,10.0.0.1
そしたらdnsmasqを起動します。
# systemctl start dnsmasq
# systemctl enable dnsmasq
これで、このRaspiがデフォルトゲートウェイと化したので、他の人がRaspiにガンガンパケットを送ってくるようになります。 でもルーティングしてないから死ぬね。
インターネットに繋ごう
そしたらWAN側をなんとかします。 LAN側にeth0を向けてて、WAN側にはwlan0を使います。
ArchLinuxは神なので、wifi-menuっていう神ツールがはいってます。(たぶんnetctlの一部)
# wifi-menu -o
ってやったら後はウィザード形式で設定できてしまいます。 簡単!!!説明することがない!!
再起動しても自動でつながるようにしておきます。
# netctl list
* eth0
* wlan0-Wi2_club
wlan0-TokyoTech
# netctl enable wlan0-Wi2_club
今回は公衆無線LANのWi2に繋いでいます。 netctlを使えば場所によって手軽にプロファイルを切り替えられる!!便利だ!!!!
ルーティングしよう
じゃあ、色んな所から届いてるパケットをうまく捌きましょう。
まず、パケット転送を有効にします。
# sysctl net.ipv4.ip_forward=1
再起動後も有効になるように/etc/sysctl.d/ipforward.conf
を作成します。
net.ipv4.ip_forward=1
あとはiptablesさんが優秀なので、例によって設定を書くだけです。
/etc/iptables/iptables.rules
を作成します。
*filter
:INPUT ACCEPT [231:17979]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [150:14976]
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [10:734]
:INPUT ACCEPT [4:314]
:OUTPUT ACCEPT [2:134]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 10.0.0.1 -i eth0 -j ACCEPT
-A POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
COMMIT
自分宛てのパケットは受け取って、それ以外はNAPT(IPマスカレード)でうまいこと書き換えて流します。
iptablesの設定を有効化します。
# systemctl start iptables
# systemctl enable iptables
できあがり!
完成です。 イーサネットコンバータもといルータと化したRaspberry Pi 3です。
wlan0のMACアドレスをWi2とかの公衆無線LANに登録すれば、無制限に分配できるマンになれます。
eth0が100Mbpsまでしか通れないので、ちょっと大きいことをしようとするとかなり辛いです。 ギガビット対応のUSB接続LANアダプタつけたらちょっとだけ速くなります。 でもUSB2.0なので最大転送速度は理論値480Mbpsくらいが限界です。かなしい。