PCにLinuxをインストールしたり、FPGA をネットワークに接続したりするとき、 イーサネットの接続ポートが近くにない場合があります。このような時は、イーサネットコンバーターでPCやFPGAをWi-Fi環境に接続する方法があります。
イーサネットコンバーターは、Raspberry Pi3で実現します。
設定は、こちらの記事を参考にしています。https://www.raspberrypi.org/forums/viewtopic.php?t=132674
1.raspbianのSDカード作成
公式サイトからraspbianをダウンロードして、raspbianのイメージを書き込んだSDカードを用意します。SDカードへの書き込みは、 Etcherが便利です。 今回利用した raspbian はBusterです。
2. SDカード内容の編集
raspbianをインストールしたSDカードの内容を、必要に応じて修正します。例えば、 SSH接続を有効にするには、SDカードの/boot/にsshという空のファイルが必要になります。
-rwxrwxrwx 0 May 29 16:10 ssh
-rwxrwxrwx 18974 Apr 8 10:25 LICENSE.oracle
-rwxrwxrwx 190 Apr 8 10:25 cmdline.txt
-rwxrwxrwx 145 Apr 8 10:25 issue.txt
:
UARTを利用する場合は、/boot/config.txtに以下の追加が必要になります。
dtoverlay=pi3-miniuart-bt
2. Raspberry Pi3の起動
Raspberry Pi3にSDカードを挿入し、キーボード、マウス、HDMIディスプレイを接続するか、またはUARTを接続して、Raspberry Piを起動します。起動後、Raspberry Pi3にログインします。
Raspbian GNU/Linux 9 raspberrypi ttyAMA0
raspberrypi login: pi
Password:
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l
3. イーサネットコンバーターの設定
wifiの設定
aptを実行するために、まずは通常のWi-Fiの設定を行います。
$sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
// 以下を追加
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="your ssid"
psk="your password"
}
必要であれば、ifconfigで表示されるwlan0のMACアドレスを、Wi-FiルーターのMACアドレスフィルタリングで許可にしておきます。
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
rebootしてWi-Fi接続を確認します。
$ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.11 netmask 255.255.255.0 broadcast 192.168.10.255
:
アップデートの実行
apt updateの後、dnsmasqをインストールします。
$sudo apt update
$sudo apt install dnsmasq -y
イーサネット固定IP設定
eth0に DHCPサーバの 固定IPを割り当て、wlan0よりも低い優先度に設定します。
$sudo vi /etc/dhcpcd.conf
// 以下を追加
interface wlan0
metric 200
interface eth0
metric 300
static ip_address=172.24.1.1/24
dnsmasqの設定
/etc/dnsmasq.confの内容を以下の様に置き換えます(最初から記載されている内容はすべて削除して置き換える)。
$sudo vi /etc/dnsmasq.conf
// 以下の内容に変更する
interface=eth0 # Use interface eth0
listen-address=172.24.1.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time
上記の例では、Raspberry Piのイーサネット側の固定IPアドレスを172.24.1.1に割り当て、DHCPのアドレスは172.24.1.50から172.24.1.150としています。
別の例として、Raspberry Piのイーサネット側の固定IPアドレスを192.168.3.1に割り当て、 DHCPのアドレスを192.168.3.50から 192.168.3. 150とする場合は、 /etc/dhcpcd.confと/etc/dnsmasq.confを次のように変更します。
$sudo vi /etc/dhcpcd.conf
// 以下を追加
interface wlan0
metric 200
interface eth0
metric 300
static ip_address=192.168.3.1/24
$sudo vi /etc/dnsmasq.conf
// 以下の内容に変更する
interface=eth0 # Use interface eth0
listen-address=192.168.3.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=192.168.3.50,192.168.3.150,12h
IPv4 フォワーディングを有効にする
$sudo vi /etc/sysctl.conf
// 以下の行を有効にする
net.ipv4.ip_forward=1
リブートして設定を反映します。
iptablesの設定
$sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
ブート時の設定用ファイルを作成し、ブート時に上記のIP マスカレードの設定が反映されるようにします。まず、次のコマンドを実行します。
$sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
次のようなファイルが生成されます。
#/etc/iptables.ipv4.nat
# Generated by iptables-save v1.6.0 on xx
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
# Completed on xx
70-ipv4-nat というファイルを作成し、ブート時に IP マスカレードの設定が反映されるようにします。
$ sudo vi /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat
//以下を追記
iptables-restore < /etc/iptables.ipv4.nat
4.機器を接続して動作を確認する
ネットワークに接続したい機器をイーサネットケーブルでRapberry Pi3と接続して、Raspberry Pi3をリブートします。接続する機器のIPアドレスの割り当ては、DHCPに設定しておきます。
Raspberry Pi3のIP貸出ログは、 /var/lib/misc/dnsmasq.leasesに出力されます。
$less /var/lib/misc/dnsmasq.leases
1575392679 00:xx:xx:xx:xx:5c 192.168.3.135 machine0 *
1575392401 08:xx:xx:xx:xx:9a 192.168.3.113 * *
1575385972 00:xx:xx:xx:xx:2e 192.168.3.82 PC0 01:xx:xx:xx:xx:xx:2e
1575379858 f4:xx:xx:xx:xx:4b 192.168.3.143 PC1 01:xx:xx:xx:xx:xx:4b