6715.jp

2016-10-16

Raspberry Pi 3 で作るイーサネットコンバータというかルータ

sekaisekai
Raspberry Piネットワーク

作ります

イーサネットコンバータ

無線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くらいが限界です。かなしい。