2016年9月3日土曜日

ラズベリーパイ(Raspberry Pi+B)を使ってイーサーネットコンバーターを作る。

ラズベリーパイを使って、有線しかないサーバーをモバイルルータ経由でインターネットへ通信をさせる。
検証サーバーや、インターネット環境がない事務所などでの暫定用として作ってみた。

簡単な構成は以下の通り。
準備物
・モバイルルータ
・ラズベリーパイ(RaspberryPi+B)
 +USB無線NIC

設定情報
・無線側 Wlan0 192.168.13.0/24
 GW 192.168.13.1
 SSID:GL06P-xxxxxx
 KEY:123456789

・有線側 Eth0 192.168.0.0/24
 GW 192.168.0.1

手順1「walnをDHCPでモバイルルーターに接続させる。」
*無線接続用のキーを生成する。 生のパスワードは削除してもOK
pi@raspberrypi ~ $ wpa_passphrase GL06P-38F889B4354B 15258604
network={
        ssid="GL06P-xxxxxxx"
        #psk="123456789"
        psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

*サプリカントに登録する。接続モードを追加する。
pi@raspberrypi ~ $sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="GL06P-xxxxxxx"
        #psk="123456789"
        psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        key_mgmt=WPA-PSK
        proto=WPA2
}

*IPアドレスを設定する。
pi@raspberrypi ~ $sudo vi /etc/network/interfaces

allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet static
address 192.168.13.10
netmask 255.255.255.0
gateway 192.168.13.1
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplucant/wpa_supplicant.conf
up iptables-restore < /etc/iptables.ipv4.nat
iface default inet dhcp

*無線側wlan0インターフェースをアップさせる。
$ sudo ifdown wlan0
$ sudo ifup wlan0

手順2「iptablesでNATルータの設定を行う。」
pi@raspberrypi ~ $sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
pi@raspberrypi ~ $sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
pi@raspberrypi ~ $sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

最後に、 /etc/iptables.ipv4.nat に書き込みます。
pi@raspberrypi ~ $sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

再起動しても設定が消えてなければOK
pi@raspberrypi:~ $ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

GoogleAD