ハンドブック:SPARC/ネットワーク/高度

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:SPARC/Networking/Advanced and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎polski • ‎русский • ‎українська • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
SPARC ハンドブック
インストール
インストールについて
メディアの選択
ネットワーク設定
ディスクの準備
stage3のインストール
Gentooベースシステムのインストール
カーネルの設定
システムの設定
ツールのインストール
ブートローダの設定
締めくくり
Gentooの操作
Portageについて
USEフラグ
Portageの機能
Initスクリプトシステム
環境変数
Portageの操作
ファイルとディレクトリ
変数
ソフトウェアブランチの併用
追加ツール
カスタムPortageツリー
高度な機能
ネットワーク設定
はじめに
高度な設定
モジュール式ネットワーク
無線
機能の追加
動的な管理


高度な設定

config_eth0変数は、インターフェースの設定の中心です。これはインターフェース(この場合eth0)を設定する高レベルの命令リストです。この命令リストの各コマンドは順に実行されます。少なくとも1つのコマンドが動作すれば、インターフェースはOKとみなします。

ビルドインの命令一覧です:

説明
null 何もしません。
noop もしインターフェースが起動していて、アドレスが存在するなら、設定を正常に中止します。
IPv4またはIPv6のアドレス アドレスをインターフェースに追加します。
dhcpadslまたはapipa(あるいはサードパーティモジュールによるカスタム値) コマンドを提供するモジュールを実行します。例えばdhcpは、dhcpcddhclientまたはpumpが提供できるDHCPを提供するモジュールを実行します。

コマンドが失敗する場合の fallback 値を設定してください。fallback は config の構造と正確に一致している必要があります。

これらの値を一緒に繋げることが可能です。これは実際の例です:

FILE /etc/conf.d/net設定例
# 3つのIPv4アドレスを追加する
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"
  
# 1つのIPv4アドレスと2つのIPv6アドレスを追加する
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"
  
# インターフェースがダウンしDHCPを使用して新しいアドレスが設定されない限り、
# カーネルに設定されているアドレスを保持する。もしDHCPが失敗したら、APIPAに
# よって決定された静的アドレスを追加する。
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
Note
ifconfig モジュールを使用して複数のアドレスを追加するとき、それぞれの追加アドレスに対してインターフェースの別名が作成されます。上の 2 つの例では、eth0、eth0:1、eth0:2 のインターフェースが得られるでしょう。カーネルや他のプログラムは eth0:1 と eth0:2 を eth0 として扱うでしょうから、これらのインターフェースに対して何か特別なことを行うことはできません。
重要
フォールバックの順番は重要です!もしnullオプションが指定されなかったら、noopが失敗した時だけapipaが実行されるでしょう。
Note
APIPAとDHCPについては後に述べられます。

ネットワーク依存関係

/etc/init.d/ 内の init スクリプトは、特定のネットワークインターフェース、または単に "net" に依存することができます。Gentoo の init システム内のすべてのネットワークインターフェースは、"net" と呼ばれるものを提供します。

もし /etc/rc.conf 内で rc_depend_strict 変数が YES に設定されている場合、"net" への依存関係が満たされたと見なされるためには、"net" を提供するすべてのネットワークインターフェースがアクティブでなくてはなりません。言い換えると、システムが net.eth0 と net.eth1 を持ち、ある init スクリプトが "net" に依存している場合、両方が有効でなくてはなりません。

一方、rc_depend_strict="NO" が設定されていると、少なくともひとつのネットワークインターフェースが有効になった時点で、"net" 依存関係は解決されたものとしてマークされます。

しかし、net.br0 が net.eth0 と net.eth1 に依存している場合はどうでしょう? net.eth1 はブリッジに追加する前に構成を必要とする、無線デバイスや PPP デバイスであるかもしれません。/etc/init.d/net.br0 が net.lo へのシンボリックリンクである限り、その中では設定することができません。

これに対する答えは /etc/conf.d/net 内で rc_net_{interface}_need 設定を定義することです:

FILE /etc/conf.d/netnet.br0 の依存を追加する
rc_net_br0_need="net.eth0 net.eth1"

しかし、これだけでは不十分です。Gentoo のネットワーク init スクリプトは、"net" と呼ばれる仮想依存を、ネットワークが利用可能になったときにシステムに通知するために使用します。上のケースでは明らかに、net.br0 が稼働しているときだけネットワークは利用可能としてマークされるべきで、他のネットワークインターフェースが稼働しているときではありません。そこで、/etc/conf.d/net にそのことも書く必要があります:

FILE /etc/conf.d/net仮想依存とネットワークの提供を更新する
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"

For a more detailed discussion about dependency, consult the section on writing initscripts in the Gentoo Handbook. More information about /etc/rc.conf is available as comments within that file.

変数名と値

変数の名前は動的に決まります。通常は、variable_${interface|mac|essid|apmac} という構造に従います。例えば、dhcpcd_eth0 は eth0 のための dhcpcd のオプションの値を保持し、dhcpcd_essid は、あるインターフェースが "essid" という ESSID に接続するときの dhcpcd のオプションの値を保持します。

However, there is no hard and fast rule that states interface names must be ethx. In fact, many wireless interfaces have names like wlanx, rax as well as ethx. Also, some user defined interfaces such as bridges can be given any name. To make life more interesting, wireless Access Points can have names with non alpha-numeric characters in them - this is important because users can configure networking parameters per ESSID.

The downside of all this is that Gentoo uses bash variables for networking - and bash cannot use anything outside of English alpha-numerics. To get around this limitation we change every character that is not an English alpha-numeric into an _ (underscore) character.

Another downside of bash is the content of variables - some characters need to be escaped. This can be achieved by placing the \ (backslash) character in front of the character that needs to be escaped. The following list of characters needs to be escaped in this way: ", ' and \.

In this example we use wireless ESSID as they can contain the widest scope of characters. We shall use the ESSID My "\ NET:

FILE /etc/conf.d/netVariable names
# This does work, but the domain is invalid
dns_domain_My____NET="My \"\\ NET"

The above sets the DNS domain to My "\ NET when a wireless card connects to an AP whose ESSID is My "\ NET.

Network interface naming

動作の仕組み

Network interface names are not chosen arbitrarily: the Linux kernel and the device manager (most systems have udev as their device manager although others are available as well) choose the interface name through a fixed set of rules.

When an interface card is detected on a system, the Linux kernel gathers the necessary data about this card. This includes:

  • The onboard (on the interface itself) registered name of the network card, which is later seen through the ID_NET_NAME_ONBOARD value.
  • The slot in which the network card is plugged in, which is later seen through the ID_NET_NAME_SLOT value.
  • The path through which the network card device can be accessed, which is later seen through the ID_NET_NAME_PATH value.
  • The (vendor-provided) MAC address of the card, which is later seen through the ID_NET_NAME_MAC value.

Based on this information, the device manager decides how to name the interface on the system. By default, it uses the first hit of the first three variables above (ID_NET_NAME_ONBOARD, _SLOT or _PATH). For instance, if ID_NET_NAME_ONBOARD is found and set to eno1, then the interface will be called eno1.

Given an active interface name, the values of the provided variables can be shown using udevadm:

root #udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
ID_NET_NAME_PATH=enp3s0

As the first (and actually only) hit of the top three variables is ID_NET_NAME_PATH, its value is used as the interface name. If none of the variables contain values, then the system reverts back to the kernel-provided naming (eth0, eth1, etc.)

Using the old-style kernel naming

Before this change, network interface cards were named by the Linux kernel itself, depending on the order that drivers are loaded (amongst other, possibly more obscure reasons). This behavior can still be enabled by setting the net.ifnames=0 boot parameter in the boot loader.

Using custom names

The entire idea behind the change in naming is not to confuse people, but to make changing the names easier. Suppose a system has two interfaces that are otherwise called eth0 and eth1. One is meant to access the network through a wire, the other one is for wireless access. With the support for interface naming, users can have these called lan0 (wired) and wifi0 (wireless - it is best to avoid using the previously well-known names like eth* and wlan* as those can still collide with the suggested names).

Find out what the parameters are for the cards and then use this information to set up a custom own naming rule:

root #udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
root #vim /etc/udev/rules.d/70-net-name-use-custom.rules
# First one uses MAC information, and 70- number to be before other net rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"
root #vim /etc/udev/rules.d/76-net-name-use-custom.rules
# Second one uses ID_NET_NAME_PATH information, and 76- number to be between
# 75-net-*.rules and 80-net-*.rules
SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"

Because the rules are triggered before the default one (rules are triggered in alphanumerical order, so 70 comes before 80) the names provided in the rule file will be used instead of the default ones. The number granted to the file should be between 76 and 79 (the environment variables are defined by a rule start starts with 75 and the fallback naming is done in a rule numbered 80).