平衡点
2015/10/24
_ OpenBlocks AX3
昨年度末に買ったは良いが、まったく触れていなかった OpenBlocks AX3 にようやく火を入れた. 購入したのは「OpenBlocks AX3 イーサ4ポート J パッケージ」.
初期状態で起動し, シリアルコンソールで接続してみると, ほぼ「素」の Wheezy環境. 公式ドキュメントにある通り,
- / は 128MB の RAM ディスク(initrd)
- /.rw を 384MB の RAMディスク(tmpfs) として確保し,
/etc,/user 等をこの下に作成
- Unionfs で /.rw/user 等を /usr に被せている
flashcfg で RAM ディスク(initrd)は上書き可能なので, 必要な設定をしたら initrd を更新しておき, システムは read-only で運用する, などとするのが良いのだろう.
想定している用途は「4 つある Gigabit Ethernet を使っての, 居室内のルーティングと職場 LAN 環境のモニタリング」であるわけだが, ちょっと設定したら, すぐに 384MB 使い切ってしまったので, そのうちメモリとディスクを追加すると思う.
_ 複数 NIC が存在する場合のルーティング
最近弄ってなかったから忘れてしまっていたので, メモ.
HW
- HW: Openblocks AX3
- OS: Debian 7.9 (wheezy)
ネットワーク環境
OpenBlocks AX3 をルータに.
- eth0: global IP
- eth1: 内部 LAN, 固定 IP
- eth2: 居室 LAN, 固定 IP
図にすると以下の様な感じ, かな?
+--------+ | | +----------内部LAN1---+gateway1+---内部LAN2,3,... | | | +------+-------+ +--------+ | eth1 | +--------+ | | | | 居室LAN---+eth2 eth0+----+gateway0+---------The Internet | | | | | eth3 | +--------+ +------+-------+
AA ちゃんと出るのかしら? 駄目か.
やりたい事
- 居室LAN内の計算機は eth2 から IP Masquarade で eth0 を経由して外へ出る
- ただし, 内部LANへの接続の際には eth1 を経由する.
- 内部LAN には VLAN 間通信が設定されているので, 内部LAN2, LAN3 への接続の際には LAN1 の gateway を経由して接続する
ルーティング
- 先ず, eth0 は通常通りに設定する.
- 次に eth1, eth2 に関しては gateway に関する設定行を書かない.
この時点で eth0, eth1, eth2 の機材との疎通を確認しておくと良い.
% route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 [gateway0] UG 0 0 0 eth0 [内部LAN1] 0.0.0.0 255.255.255.0 U 0 0 0 eth2 [グローバルIP] 0.0.0.0 255.255.255.0 U 0 0 0 eth0 [居室LAN] 0.0.0.0 255.255.255.0 U 0 0 0 eth1
といった塩梅.
最後に route を追加: 内部LAN2,3 の gateway として [gateway1] を指定してやれば良い
% route add -net [内部LAN2] netmask 255.255.255.0 gw [gateway1] dev eth2 % route add -net [内部LAN3] netmask 255.255.255.0 gw [gateway1] dev eth2 % route add -net [内部LAN4] netmask 255.255.255.0 gw [gateway1] dev eth2
結果
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 [gateway0] UG 0 0 0 eth0 [内部LAN1] 0.0.0.0 255.255.255.0 U 0 0 0 eth2 [内部LAN2] [gateway1] 255.255.255.0 U 0 0 0 eth2 [内部LAN3] [gateway1] 255.255.255.0 U 0 0 0 eth2 [グローバルIP] 0.0.0.0 255.255.255.0 U 0 0 0 eth0 [居室LAN] 0.0.0.0 255.255.255.0 U 0 0 0 eth1
DNS
グローバル側, 内部LAN, 居室LANそれぞれの名前解決をどうするか, ということで安直なのは dnsmasq を使うこと.
/etc/resolv.conf は常に 127.0.0.1 を見るようにしておく.
nameserver 127.0.0.1 search [居室LANのドメイン]
/etc/dnsmasq.d/local.conf なんてファイルを作成して, 以下を書き込んでおく.
except-interface=eth0,eth2,eth3 listen-address=127.0.0.1,[eth1のIP] bind-interfaces dhcp-range=eth1,[居室LAN DHCP start],[居室LAN DHCP end],12h no-dhcp-interface=eth0,eth2,eth3 resolv-file=/etc/dnsmasq.resolv.conf strict-order server=/[内部LANドメイン]/[内部LANのDNS] server=/[内部LAN1逆引き]/[内部LANのDNS] server=/[内部LAN2逆引き]/[内部LANのDNS] server=/[内部LAN3逆引き]/[内部LANのDNS]
/etc/dnsmasq.resolv.conf にグローバル側の DNS を書いておく
nameserver [DNS1] nameserver [DNS2]
- /etc/hosts に居室LAN内の計算機をベタ書きしておく. DHCP レンジは使わないこと.
これによって
- DNS, DHCP の受け付けは 居室LAN (eth1) からのみ.
- 通常は global 側の DNS で名前解決:
- 指定したドメイン等に関しては内部LANのDNSを使う
となる. また, DHCP での接続も OK
NAT/IP forward
net.ip4.ip_forward=1 にして iptables で NAT テーブルを書くだけで良い. POSTROUTING をアドレスによってデバイス(eth0, eth2)に割り振る, というのが違いかな?
最近は適当に ip forward の設定を書いた後で, iptables-persisitent (jessie 以降は netfilter-persistent) を実行して, 起動時に有効になるようにしている.
まとめ?
居室にはいま(プリンタ等も含め) 15 台ぐらい計算機があって, わりと結構な量の通信があるのだけれど, 特に問題無く動いている模様.
とりあえず.