ハンドブック:AMD64/ネットワーク/モジュラー
ネットワークモジュール
Netifrc はモジュール化されたネットワークスクリプトをサポートしています。つまり、既存のスクリプトとの互換性を保ちつつ、新しいインターフェースタイプのサポートと設定モジュールを簡単に追加することができます。
モジュールは、それらが必要とするパッケージがインストールされていれば、デフォルトでロードされます。必要なパッケージがインストールされていないモジュールを指定した場合、インストールする必要のあるパッケージを示すエラーが報告されます。理想的には、同様のサービスを提供する 2 個以上のパッケージがインストールされていて、そのうち一方を選択したい場合にのみ、モジュール設定が使用されます。
ここで説明されるすべての設定は、特に指定が無い限り /etc/conf.d/net に保存されるものです。
# iproute2 より ifconfig を優先します
# modules="ifconfig"
# インターフェースごとに異なるモジュールを指定できます
# ここでは dhcpcd より dhclient を優先します
modules_eth0="dhclient"
# 使用したくないモジュールを指定することもできます - 例えば無線の設定の
# 管理に supplicant あるいは linux-wlan-ng を使用しているが、それでも
# 接続している ESSID ごとにネットワーク設定を管理したい。
modules="!iwconfig"
インターフェース・ハンドラー
私たちは 2 種類のインターフェースハンドラを提供しています: ifconfig と iproute2 です。一方のみがあれば、すべてのネットワーク設定を行うことができます。
どちらもシステムプロファイルの一部として、デフォルトでインストールされます。iproute2 のほうが強力で、柔軟な設定が行えるパッケージです。ifconfig と net-tools は、今はもうネットワーク構成のために使用すべきではありません。
iproute2 と ifconfig は非常に似たことを行うものなので、基本的な設定はどちらに対しても動作するようになっています。例えば、下の設定は使用されるモジュールにかかわらず動作します。
config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"
DHCP
DHCP は、サーバから IP アドレスなどのネットワーク情報 (DNS サーバ、ゲートウェイ等) を取得するための方法です。ネットワーク上に動作している DHCP サーバがあれば、ユーザはそれぞれのデバイスに DHCP を介して構成情報を取得することを指示するだけで、DHCP を使用してデバイスを自動的に設定することができます。もちろん、このためには (例えば、無線アクセスポイントや PPPoE 等を経由した) ネットワーク接続が必要です。
DHCP の機能は dhclient または dhcpcd によって提供されます。DHCP モジュールのそれぞれに長所と短所があります。以下に概略を示します:
DHCP モジュール | パッケージ | 長所 | 短所 |
---|---|---|---|
dhclient | net-misc/dhcp | BIND DNS ソフトウェアを作成している ISC によって作成されている。非常に柔軟な設定が可能。DHCPv4 または DHCPv6 を提供するために使用できる。 | 設定が過剰に複雑、ソフトウェアはかなり肥大化している、DHCP から NTP サーバを取得できない、デフォルトではホスト名を送信しない。もう上流で保守されていない。 |
dhcpcd | net-misc/dhcpcd | 長きにわたり Gentoo のデフォルト、外部ツールへの依存が無い、Gentoo により活発に開発されている。DHCPv4 と DHCPv6 を同時に提供する。 | たまに遅いことがある、リース期間が無限の場合にデーモン化しない。 |
複数の DHCP クライアントがインストールされている場合は、modules="dhcpcd"
などのように "modules" 変数を設定することによって、どのクライアントを使用するかを指定することができます。指定しておらず、dhcpcd がインストールされている場合は、dhcpcd がデフォルトで使用されます。
DHCP モジュールに特定のオプションを送信するには、module_eth0="..." を使用してください。ここで module は、例えば "dhcpcd_eth0" などの、使用したい DHCP モジュールです。
私たちは DHCP を比較的特定のソフトウェアに依存しないようにしています。dhcp_eth0 変数を使用した次のコマンドをサポートしています。デフォルトではこれらはどれも設定されません:
release
- IP アドレスが再利用できるように解放します。
nodns
- /etc/resolv.conf を上書きしません。
nontp
- /etc/ntp.conf を上書きしません。
nonis
- /etc/yp.conf を上書きしません。
# 複数の DHCP モジュールがインストールされている場合のみ必要
modules="dhcpcd"
config_eth0="dhcp"
dhcpcd_eth0="-t 10" # 10 秒後にタイムアウト
dhcp_eth0="release nodns nontp nonis" # アドレス取得だけ行う
dhcpcd はデフォルトで現在のホスト名を DHCP サーバに送信するので、もうこれを指定する必要はありません。
# 複数の DHCP モジュールがインストールされている場合のみ必要
modules="dhclient"
config_eth0="dhcpv6"
# デュアルスタックネットワーク上で DHCPv4 と DHCPv6 の両方を使用するには、上の行を削除して、以下の行のコメントを解除してください
#config_eth0="dhcp
#dhcpv6"
# DHCPv6 のために dhclient にランタイム引数を渡すには
dhclientv6_eth0="-t 10" # 10 秒後にタイムアウト
# 汎用 DHCPv6 オプションを設定する
dhcpv6_eth0="release nodns nontp nonis nogateway nosendhost"
PPPoE/PPPoA を使用した ADSL
まずは ADSL ソフトウェアのインストールが必要です:
root #
emerge --ask net-dialup/ppp
次に、PPP net スクリプトと、PPP が使用する Ethernet インターフェースのための net スクリプトを作成してください:
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
/etc/rc.conf で rc_depend_strict を YES
に設定しているか確認してください。
そして /etc/conf.d/net を設定することが必要です。
config_eth0=null (Specify the ethernet interface)
config_ppp0="ppp"
link_ppp0="eth0" (Specify the ethernet interface)
plugins_ppp0="pppoe"
username_ppp0='user'
password_ppp0='password'
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
rc_need_ppp0_need="net.eth0"
また、 /etc/ppp/pap-secrets 内にパスワードを記載することもできます。
# 以下の「*」は必要です。
"username" * "password"
PPPoE を USB モデムとともに使用する場合は、br2684ctl を emerge しているか確認してください。適切に設定する方法についての情報は /var/db/repos/gentoo/net-dialup/speedtouch-usb/files/README をお読みください。
/usr/share/doc/netifrc-*/net.example.bz2 の ADSL と PPP についてのセクションをよく読んでください。ここには一部の PPP 構成で必要になりそうなすべての設定について、より詳しい説明が多く書かれています。
APIPA (Automatic Private IP Addressing)
APIPA は、そのインターフェースから arping を使用して、 169.254.0.0-169.254.255.255 の範囲内のランダムなアドレスに ping することで、範囲内の使用されていないアドレスを探します。応答が無かった場合、そのアドレスがインターフェースに割り当てられます。
これは以下の条件を満たす LAN でのみ有用です:
- DHCP サーバがなく;
- システムはインターネットに直接接続しておらず;
- 他のすべてのコンピュータが APIPA を使用している。
APIPA サポートを追加するには、arping
USE フラグを有効化して net-misc/iputils を emerge するか、net-analyzer/arping を emerge してください。
# まず DHCP を試し、失敗した場合は APIPA にフォールバックする
config_eth0="dhcp"
fallback_eth0="apipa"
# APIPA だけを使う
config_eth0="apipa"
ボンディング
ボンディングは、ネットワーク帯域を増やすためや、ハードウェア故障時の回復力を改善するために使用されます。システムに同一のネットワークに接続する 2 個のネットワークカードが存在するとき、これらをくっつける (bond) ことができます: そうすると、アプリケーションには 1 個のインターフェースとして見えるでしょうが、実際には両方のネットワークカードが使用されるでしょう。
ボンディングを構成する方法は複数あります。そのうちの一部、例えば 802.3ad LACP モードなどは、専用のサポートやネットワークスイッチの追加の構成が必要になります。それぞれの選択肢のリファレンスについては、/usr/src/linux/Documentation/networking/bonding.txt のローカルコピーを参照してください。
まず、ボンディングに参加するインターフェースの設定をクリアしてください:
config_eth0="null"
config_eth1="null"
config_eth2="null"
次に、インターフェース間のボンディングを定義してください:
slaves_bond0="eth0 eth1 eth2"
config_bond0="192.168.100.4/24"
# 要求に合った、正しいモードと追加の構成オプションを選択してください
mode_bond0="balance-alb"
関連するランレベルから net.eth* サービスを削除し、net.bond0 サービスを作成して、このサービスを適切なランレベルに追加してください。
ブリッジ (802.1d サポート)
ブリッジはネットワークを相互接続するのに使用されます。例えば、あるネットワークには、ADSL モデム経由でインターネットに接続するサーバと、そのネットワーク上の他のデバイスがこのモデムを経由してインターネットにアクセスできるようにするための、無線アダプタがあるとします。ブリッジを作成することで、2 個のインターフェースを相互接続することができます。
# ブリッジを構成します - 詳細は "man brctl" を確認してください
bridge_forward_delay_br0=0
bridge_hello_time_br0=200
bridge_stp_state_br0=1
# ブリッジ br0 にポートを追加する
bridge_br0="eth0 eth1"
# dhcp が開始しないように、元のポートを null 値に設定する必要があります
config_eth0="null"
config_eth1="null"
# 最後にブリッジにアドレスを割り当てます - DHCP を使用することもできます
config_br0="192.168.0.1/24"
# 追加の構成が必要かもしれないので、eth0 と eth1 に依存させます
rc_net_br0_need="net.eth0 net.eth1"
ブリッジ構成を使用するために、上の変数名のドキュメントを確認してください。
IPv6 を使ってブリッジを構成する場合、SLAAC によって、上の例で見られるように STP を
1
に設定することが要求されます。MAC アドレス
ネットワーク設定ファイルを通して、インターフェースの MAC アドレスを変更することもできます。
# インターフェースの MAC アドレスを設定するには
mac_eth0="00:11:22:33:44:55"
# 末尾 3 バイトのみをランダム化するには
mac_eth0="random-ending"
# 物理接続種別 (例: ファイバ、銅線、無線) が同一である、すべてのベンダの
# インターフェース間でランダム化するには
mac_eth0="random-samekind"
# 物理接続種別 (例: ファイバ、銅線、無線) を問わず、すべてのベンダの
# インターフェース間でランダム化するには
mac_eth0="random-anykind"
# 完全ランダム化 - 警告: これにより生成された MAC アドレスの一部は
# 期待通りに動作しないことがあります
mac_eth0="random-full"
トンネリング
トンネリングは、インターフェースハンドラによって行うことができるので、ソフトウェアを追加でインストールする必要はありません。
# GRE トンネル
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# IPIP トンネル
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# インターフェース設定
config_vpn0="192.168.0.2 peer 192.168.1.1"
VLAN (802.1q サポート)
VLAN のサポートのためには、sys-apps/iproute2 がインストールされていることと、(ifconfig ではなく) iproute2 が構成モジュールとして使用されていることを確認してください。
VLAN、あるいは仮想 LAN とは、物理的な実態に関わらず、それぞれ個別のネットワークセグメントに接続されているかのように振る舞うネットワークデバイス群です。VLAN のメンバは、仮に同一の物理ネットワークを共有していたとしても、同一の VLAN の他の参加ノードとのみ通信できます。
VLAN を構成するには、まず次のように /etc/conf.d/net で VLAN 番号を指定してください:
vlans_eth0="1 2"
次に、各 VLAN に対するインターフェースを構成してください:
config_eth0_1="172.16.3.1 netmask 255.255.254.0"
routes_eth0_1="default via 172.16.3.254"
config_eth0_2="172.16.2.1 netmask 255.255.254.0"
routes_eth0_2="default via 172.16.2.254"
VLAN 固有の設定は次のようにすることで、vconfig によって処理されます:
vlan1_name="vlan1"
vlan1_ingress="2:6 3:5"
eth0_vlan1_egress="1:2"
VLAN 構成を使用するために、上の変数名のドキュメントを確認してください。