ハンドブック: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 は、DHCP サーバからネットワーク情報 (IP アドレス、DNS サーバ、ゲートウェイ等) を取得するための方法です。つまり、ネットワーク上に動作している DHCP サーバが存在すれば、ユーザはそれぞれのクライアントに DHCP を使うことを指示するだけで、ネットワークを自動でセットアップすることができます。もちろん、無線アクセスポイントへの接続や PPPoE やその他の観点から必要なものがあれば、DHCP サービスが使えるようになる前にそれを設定する必要があるかもしれません。
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 クライアントがインストールされている場合はどれを使うか指定してください。指定しない場合、(インストールされていれば) dhcpcd がデフォルトとして使用されます。
DHCP モジュールに特定のオプションを送信するには、module_eth0="..."
を使用してください (module の部分を使用したい DHCP モジュールに変更してください、例えば dhcpcd_eth0 のように)。
私たちは 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 は、インターフェースから 169.254.0.0-169.254.255.255 の範囲内のランダムなアドレスを arp することで、範囲内の使用されていないアドレスを探します。応答が無かった場合、そのアドレスをインターフェースに割り当てます。
これは DHCP サーバが無く、システムがインターネットに直接接続せず、他のすべてのコンピュータが APIPA を使う LAN に対してのみ有用です。
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 モデム経由でインターネットに接続するサーバと、他のコンピュータがその 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 が構成モジュールとして使用されていることを確認してください。
仮想 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 構成を使用するために、上の変数名のドキュメントを確認してください。