2014年11月6日木曜日

Ubuntu 14.04でNICをブリッジ

歴史的経緯があって同じサブネットが物理的に2つのネットワークに分かれて、
それら2つが互いに中継もされず運用されているにも関わらず、
1つのPCから両方にアクセスしたいというような
わけの分からない要求があるとします。
PCにある2つのNICをそれぞれのネットワークにつなげても、
サブネットが同じなのでIPアドレスの系がかぶり、まともにルーティングできないのですが、
いろいろ制約があるもののUbuntu 14.04でブリッジを使い
実現できたので書き残しておきます。

最初に以下を実行してブリッジが使えるようにします。
# apt-get install bridge-utils
次いで設定ファイル"/etc/networks/interfaces"に以下の内容を追加します。
iface eth0 inet manual
iface eth1 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1
ここでは2つのNICであるeth0とeth1をまとめてブリッジbr0としています。
なお、双方のサブネットにDHCPサーバが存在すると、
どちらからIPアドレスをもらってくるか不定になってしまうため、
そういう場合は手動でIPアドレスを設定するのがよいでしょう。
iface br0 inet dhcp
の行を以下のように置き換えます。
IPアドレス等は環境に合わせ適宜読み替えてください。
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
bridge_ports eth0 eth1
gateway 192.168.1.1
broadcast 192.168.1.255
network 192.168.1.0
さらにDSNサーバの設定のため"/etc/resolv.conf"も書き換えたいところですが、
Ubuntu14.04では起動時に自動生成されてされてしまうので、
"/etc/resolvconf/resolv.conf.d/base"に
nameserver <DSNサーバのIPアドレス>
の行を追加して、
# resolvconf -u
を実行するのが正しい解決法です。

さて、この状態だとこのUbuntu PCがeth0とeth1を中継して
理論的に1つの大きなネットワークになってしまいます。
それが嫌な場合は以下を実行します。
# ebtables -P FROWARD DROP
PC起動時からそうしたい場合は
設定スクリプトファイル"/etc/network/if-pre-up.d/bridge"の
if [ "$MODE" = "start" ] ; then
の行の直後に
ebtables -P FROWARD DROP
の行を追加しておけば実現できます。

もし両方に同じIPアドレスの機器が存在すると面倒なことになりますし、
他にも何か問題が発生するかもしれませんので、
TCP/IPについてよく理解してから試すことをお勧めします。

0 件のコメント:

コメントを投稿