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

作ります

イーサネットコンバータ

無線LANの電波を有線に変換するやつ(適当)

公衆無線LANをイーサネットコンバータで有線ネットワークにつなげると嬉しいね、みたいな。
てかこれルータじゃないか?

準備

突然ですがArchLinuxは神です。
とりあえずRaspiにArchLinuxARMを入れます。

x86_64の一般的なやつと比べるとインスコ難易度は低めです。

ここのInstallationをみましょう
https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3

なんかmacOSでやろうとしたら詰んだので、Linux上でやることをオススメします。
ボクはArchLinux(x86_64) on VirtualBox on macOSでやったんですが、非常に闇だったのでおすすめしません。
Windowsは知りません。ガンバッテ。

ちなみにx86_64版のインストールはこの記事がわかりやすいですね!!11
https://trap.tokyotech.org/blog/2016/02/conoha-archlinux/

設定

IPを固定しよう

先にLAN側をやりましょう。

今回は10.0.0.0/24なネットワークを作ってみます。
ArchLinuxは神なのでnetctlっていう神ツールが入っています。

この設定ファイル/etc/netctl/eth0を書いて、

1
2
3
4
Interface=eth0
Connection=ethernet
IP=static
Address=('10.0.0.1/24')

1
2
# netctl start eth0
# netctl enable eth0

こんなかんじ。
自分のIPアドレスは10.0.0.1にしました。

DHCP/DNSサーバになろう

市販のルーターにはだいたいついてるDHCP/DNS機能ですが、dnsmasqってのがありまして、この人がこの2つを兼任してくれます。

とりあえずインストール

1
# pacman -S dnsmasq

で、設定ファイル/etc/dnsmasq.confに追記します。

1
2
3
4
5
6
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を起動します。

1
2
# systemctl start dnsmasq
# systemctl enable dnsmasq

これで、このRaspiがデフォルトゲートウェイと化したので、他の人がRaspiにガンガンパケットを送ってくるようになります。
でもルーティングしてないから死ぬね。

インターネットに繋ごう

そしたらWAN側をなんとかします。
LAN側にeth0を向けてて、WAN側にはwlan0を使います。

ArchLinuxは神なので、wifi-menuっていう神ツールがはいってます。(たぶんnetctlの一部)

1
# wifi-menu -o

ってやったら後はウィザード形式で設定できてしまいます。
簡単!!!説明することがない!!

再起動しても自動でつながるようにしておきます。

1
2
3
4
5
6
# netctl list
* eth0
* wlan0-Wi2_club
wlan0-TokyoTech
# netctl enable wlan0-Wi2_club

今回は公衆無線LANのWi2に繋いでいます。
netctlを使えば場所によって手軽にプロファイルを切り替えられる!!便利だ!!!!

ルーティングしよう

じゃあ、色んな所から届いてるパケットをうまく捌きましょう。

まず、パケット転送を有効にします。

1
# sysctl net.ipv4.ip_forward=1

再起動後も有効になるように/etc/sysctl.d/ipforward.confを作成します。

1
net.ipv4.ip_forward=1

あとはiptablesさんが優秀なので、例によって設定を書くだけです。

/etc/iptables/iptables.rulesを作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*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の設定を有効化します。

1
2
# systemctl start iptables
# systemctl enable iptables

できあがり!

完成です。
イーサネットコンバータもといルータと化したRaspberry Pi 3です。

wlan0のMACアドレスをWi2とかの公衆無線LANに登録すれば、無制限に分配できるマンになれます。

eth0が100Mbpsまでしか通れないので、ちょっと大きいことをしようとするとかなり辛いです。
ギガビット対応のUSB接続LANアダプタつけたらちょっとだけ速くなります。
でもUSB2.0なので最大転送速度は理論値480Mbpsくらいが限界です。かなしい。

そのへんで悪戦苦闘した記録は、サークルのブログに書こうと思います。。。
https://trap.tokyotech.org/blog/2016/10/koudaisai-network/
(書き上がるまでは404です。ごめんね)

このエントリーをはてなブックマークに追加