「RHEL/ネットワーク」の版間の差分
提供: Wikinote
< RHEL
細 (→/etc/sysconfig/network-scripts/ifup スクリプト) |
細 (→/etc/init.d/network スクリプト) |
||
行11: | 行11: | ||
#* ネットワーク関係の関数定義。これもそのうち読む。 | #* ネットワーク関係の関数定義。これもそのうち読む。 | ||
# 処理すべきインターフェースを取得 | # 処理すべきインターフェースを取得 | ||
− | #* [[ | + | #* [[#/etc/sysconfig/network-scripts/ifcfg-<if>|こちら]]で少し詳しく解説。 |
# <code>NETWORKING_IPV6=yes</code> ならば、<code>/etc/sysconfig/network-scripts/init.ipv6-global start pre</code> を実行 | # <code>NETWORKING_IPV6=yes</code> ならば、<code>/etc/sysconfig/network-scripts/init.ipv6-global start pre</code> を実行 | ||
#* <code>/etc/sysconfig/network</code> に <code>NETWORKING_IPV6=no # '''this option has no effect.'''</code> とあるが、これはどういう意味だろうか? | #* <code>/etc/sysconfig/network</code> に <code>NETWORKING_IPV6=no # '''this option has no effect.'''</code> とあるが、これはどういう意味だろうか? |
2009年2月4日 (水) 22:38時点における版
ソースより厳密な説明書はない。
目次
スクリプト/設定ファイル
/etc/init.d/network
スクリプト
-
/etc/init.d/functions
を実行 (主に関数定義)- 内容はそのうち読む。
-
/etc/sysconfig/network
を読む (設定ファイル) -
NETWORKING=no
でなければ、以下に進む - カレントディレクトリを
/etc/sysconfig/network-scripts/
に変更 -
./network-functions
を実行 (関数定義)- ネットワーク関係の関数定義。これもそのうち読む。
- 処理すべきインターフェースを取得
- こちらで少し詳しく解説。
-
NETWORKING_IPV6=yes
ならば、/etc/sysconfig/network-scripts/init.ipv6-global start pre
を実行-
/etc/sysconfig/network
にNETWORKING_IPV6=no # this option has no effect.
とあるが、これはどういう意味だろうか?
-
-
sysctl -e -p /etc/sysctl.conf
を実行-
-e
オプションは、未知のキーによるエラーを無視する。 -
-p
オプションは、読み込むファイルを指定する。
-
-
./ifup ifcfg-lo
を実行。- いつものログ ("Bringing up loopback interface") は、
action
というコマンドで出力していると思われる。(/etc/init.d/functions
で定義されている。)
- いつものログ ("Bringing up loopback interface") は、
- 以下は、各 (リアル) インターフェース毎に実行される
-
DEVICE, TYPE, SLAVE
値をセット -
DEVICE
がなければ、ifcfg-* の * の部分を DEVICE に設定 -
SLAVE=yes
なら、次のインターフェースへ -
ONBOOT=no
がなければ、is_available IF
を実行- この関数の中身を調査すること。
- "Bringing up interface IF:" を表示し、
./ifup IF boot
を実行
-
- スタティックルーティングの設定
-
/etc/sysconfig/static-routes
を 1 行ずつ/sbin/route add
しているようだが、渡し方にテクが見られるので、後で調べること。
-
-
NETWORKING_IPV6=yes
ならば、/etc/sysconfig/network-scripts/init.ipv6-global start post
を実行 - 再度
sysctl -e -p /etc/sysctl.conf
を実行 -
touch /var/lock/subsys/network
を実行
/etc/sysconfig/network-scripts/ifup
スクリプト
-
/etc/init.d/functions
を実行 - カレントディレクトリを
/etc/sysconfig/network-scripts/
に変更 -
./network-functions
を実行 -
/etc/sysconfig/network
を読む -
need_config コンフィグファイル
を実行 - ルート以外 (
$UID != 0
) ならば、以下を実行-
source_config
- ルート以外のユーザが up 可能なら、
/usr/sbin/usernetctl $CONFIG up
-
-
source_config
/etc/sysconfig/network
設定ファイル
参考:15.1.22. /etc/sysconfig/network
-
NETWORKING=yes|no
-
/etc/rc.d/init.d/network
を見ると以下のようになっているため、NETWORKING=no 以外はすべて yes とみなされるようだ。よって、必須ではないと思われる。
# Check that networking is up. [ "${NETWORKING}" = "no" ] && exit 0
-
HOSTNAME=ホスト名
- FQDN を記述する。/etc/sysconfig/network-scripts/ifup-post で設定される。
-
GATEWAY=デフォルトゲートウェイの IP アドレス
-
GATEWAYDEV=ゲートウェイデバイス (eth0 等)
- /etc/sysconfig/network-scripts/ifup-eth0 で設定されているようだが、詳細がよくわからない。
-
NISDOMAIN=NISドメイン名
- NIS は、Network Information Service の略。/etc/rc.d/init.d/ypbind で用いられる。
/etc/sysconfig/network-scripts/ifcfg-<if>
設定ファイル
参考:14.2.1. Ethernet Interfaces
-
ONBOOT=yes|no
- network スクリプトによると、やはり no でなければ yes と言ったことと同じであるようだ。嫌なら嫌とはっきり言いましょう。ちなみに、grep はパターンが出現しなければ 1 となる。-L オプションは、パタンが出現しないときにファイル名を出力するものだが、単に 1 個見つかったらそれ以上検索しないようにしているだけだと思われる。
if LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then # this loads the module, to preserve ordering is_available $i continue fi
-
DEVICE=デバイス名
- 設定がない場合、ifcfg-* の * の部分がデバイス名となる。そのため、ifcfg ファイルは適当な名前を付けるとネットワークに支障をきたす恐れがあるので注意。ifcfg ファイルのバックアップは、別ディレクトリに置くかまたは拡張子を必ず .bak か .orig で行うこと。なぜなら、
/etc/rc.d/init.d/network
では以下の部分で読むべきコンフィグファイルを探しているが、ls をフィルタにかけているだけの原始的設計のため。
# find all the interfaces besides loopback. # ignore aliases, alternative configurations, and editor backup files interfaces=$(ls ifcfg* | \ ★ ifcfg で始まるファイル名 LANG=C sed -e "$__sed_discard_ignored_files" \ ★ 無視するファイル名を削除 -e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \ ★ lo 及び仮想 IP を削除 -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ ★ ifcfg- 部分を削除し、数字部分を分離 LANG=C sort -k 1,1 -k 2n | \ ★インターフェース名でソート? -k 2n ってなんだ? LANG=C sed 's/ //') ★分離していた数字部分を再び結合
-
$__sed_discard_ignored_files
は/etc/rc.d/init.d/functions
で定義されている。拡張子が .bak か .orig でなければならない理由。あ、~ (チルダ) でも良いのね。
# A sed expression to filter out the files that is_ignored_file recognizes __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
- どういう出力になるか、メモしておこう。
[hagio@k-hagio-ab2 lab]$ ll total 0 -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-bond0 -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-eth0 -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth0:0 ★IP エイリアス -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth0~ ★バックアップ -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-eth1 -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth1.backup ★バックアップ -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth1.bak ★バックアップ -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:16 ifcfg-hage ★ハゲ☆インターフェース -rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-lo [hagio@k-hagio-ab2 lab]$ ls ifcfg* | LANG=C sed - "... bond0 eth0 eth1 eth1.backup ★アウトー!! hage ★DEVICE=デバイス名 が正しく設定されていればセーフ
-
HWADDR=MACアドレス
- ifup-eth でチェックされる。
-
BOOTPROTO=none|dhcp|bootp
- static などというものはない!(dhcp と bootp 以外は意味を持たない)
-
IPADDR=IPアドレス
-
NETMASK=ネットマスク
-
NETWORK=ネットワークアドレス
-
BROADCAST=ブロードキャストアドレス
-
- これらは IP アドレスさえ設定すれば、
ipcalc
コマンドで自動的に計算される。
-
DHCP_HOSTNAME=DHCPホスト名
- DHCP サーバに送るホスト名。/etc/dhclient-<if>.conf に以下のように追記される。
$ cat /etc/dhclient-eth0.conf send host-name "k-hagio-ab2"; # temporary RHL ifup addition
-
MASTER=bonding インターフェース名
- bonding で使用する。SLAVE も設定が必要。
-
SLAVE=yes|no
- bonding で利用する。MASTER によって制御されるかどうかを示す。興味深いことに、こちらの設定は yes 以外はすべて意味がない。MASTER にとって、yes と言わない SLAVE は存在価値がないのだ。
-
BONDING_OPTS=オプション
- bonding で利用するオプション。ifup-eth によって、/sys/class/net/デバイス名/bonding/ 配下にファイルが作られる。
-
SRCADDR=IPアドレス
- 送信パケットの IP アドレス
-
USRCTL=yes|no
- ルートユーザ以外がこのインターフェースを制御できるかどうか
-
ETHTOOL_OPTS=オプション
- ethtool に渡されるパラメタ
if [ -n "$ETHTOOL_OPTS" ] ; then /sbin/ethtool -s ${REALDEVICE} $ETHTOOL_OPTS fi
/etc/sysconfig/static-routes
- ルーティング (行頭の any より後ろが
route add
にそのまま渡される。)
netfilter (iptables)
カーネルの高機能なパケットフィルタリングシステム。
- 私は真にわかりやすい説明を思いついたが、この余白はそれを書くには狭すぎる。-- hagio
tcp_wrappers
/etc/hosts.* を用いたアクセス制御を提供する。
基本的な構文
daemon_list: client_list[:options]
-
daemon_list
- コンマ区切りの実行ファイル名リスト (サービス名ではない)
- ワイルドカードである ALL, EXCEPT も利用可能
-
client_list
- コンマ区切りの以下の要素からなるリスト
- IP アドレス
- ホスト名
- ドットで終わるネットワーク (例:10.34.125.)
- ドットで始まるドメイン名 (例:.hoge.org)
- ネットワーク/ネットマスク (例:192.168.1.0/255.255.255.0) ※/24 ぢゃダメ
- ワイルドカード
- ALL - すべてにマッチ
- EXCEPT - 除外リストを指定できる
- コンマ区切りの以下の要素からなるリスト
例) sshd: ALL EXCEPT .hoge.org
他にもあるけどマニアックすぎる... (LOCAL, UNKNOWN, KNOWN, PARANOID)
サービスが tcp_wrappers に対応しているかどうかの判別には、
ldd
を使って libwrap
がリンクされているか確認すればよい。
[root@localhost root]# ldd /usr/sbin/httpd | grep libwrap [root@localhost root]# ldd /usr/sbin/sshd | grep libwrap libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00b2e000)
ということで、httpd (Apache) は /etc/hosts.* ではアクセス制御ができない。