インターネット共有のための sysctl での設定に躓いた
こんにちは。 Raspberry Pi に ArchLinux ARM を入れてみて遊んでいます。
1年くらい前、使わなくなったパソコンを使ってルータもどきを作ったことがありまして、同じものを Raspberry Pi で作ろうとしたところ、躓いたのでメモします。
ArchLinux や他の Linux で再現できるかどうか調べてません。
前回はこんな設定なかったと思うんだけどな。OS のバージョンやカーネルのアップデートによるものなのかは、この場合どこを追えばいいんですかね。
1年くらい前、使わなくなったパソコンを使ってルータもどきを作ったことがありまして、同じものを Raspberry Pi で作ろうとしたところ、躓いたのでメモします。
ArchLinux や他の Linux で再現できるかどうか調べてません。
前回はこんな設定なかったと思うんだけどな。OS のバージョンやカーネルのアップデートによるものなのかは、この場合どこを追えばいいんですかね。
環境など
- Raspberry Pi B+
http://blog.ksswre.net/2015/09/raspberry-pi-b-arch-linux-arm-planex-gw.html - ArchLinux ARM
- uname -srvmo
Linux 4.1.6-2-ARCH #1 PREEMPT Sat Aug 22 12:17:40 MDT 2015 armv6l GNU/Linux
インターネット共有
目指すはこんな感じで使う。 3GやWiMAXのモバイルルータを有線に変換したい(だけ)。1年前に作ったのも構成はこちらと同じもの。
Internet ← (モバイルルータ) ← wlan0 ← (Raspberry Pi) ← eth0
実装方針
ここに従います。
- 静的 IP を割り当て(この場合は eth0 に)
- カーネルオプションをいじってパケット転送を有効化
- NAT の有効化
でも、これだと正常に動きませんでした。外へのパケット転送ができなかった。
解決へ
このときのカーネルオプションはこう。
# sysctl -a | grep forward
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 0
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.wlan0.forwarding = 0
net.ipv4.conf.wlan0.mc_forwarding = 0
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.mc_forwarding = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.default.mc_forwarding = 0
sysctl: reading key "net.ipv6.conf.default.stable_secret"
net.ipv6.conf.eth0.forwarding = 0
net.ipv6.conf.eth0.mc_forwarding = 0
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
net.ipv6.conf.lo.forwarding = 1
net.ipv6.conf.lo.mc_forwarding = 0
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
net.ipv6.conf.wlan0.forwarding = 0
net.ipv6.conf.wlan0.mc_forwarding = 0
sysctl: reading key "net.ipv6.conf.wlan0.stable_secret"
インターフェイスごとにオプションがあるけど net.ipv4.conf.all.forwarding = 1 だから問題ないんだろうなと思ってたらそれ間違いで、実際は all に加えて両方のインターフェイスの forwarding を 1 にする必要があった。
つまり、
を加える必要がある。
つまり、
net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.eth0.forwarding = 1 net.ipv4.conf.wlan0.forwarding = 1
を加える必要がある。
コメント
コメントを投稿