Linuxのnetwork namespaceについて
network namespace とは = Linux OS上のネットワークリソース(routing table, nic, firewall)を名前空間で分離することが出来る。
■ip netns コマンド
# network namespaceの作成
ip netns add <namespace>
alias: ina
# network namespaceの一覧を表示
ip netns list
alias: inl
# network namespaceの中でbashを実行する
ip netns exec <namespace> ip a
alias: ine
# network namespaceの削除
ip netns delete <namespace>
alias: ind
■ip link コマンド = ネットワークインターフェースを設定するコマンド
# ネットワークインターフェースの作成
ip link add <p1-name> type <タイプ> name <p2-name>
alias: ila (ip link add)
▽タイプ
veth peer: veth(virtual ethernet)のこと。↓のようなペアを作成する。
<p1-name>+----------------------+<p2-name>
# ネットワークインターフェースの一覧を表示
ip link show
alias: ip l
# ネットワークインターフェースのstateを変更。事前にaddressを設定する
ip link set dev <nic> <UP or DOWN>
# 仮想リンクをnamespaceにセットする
ip link set <nic> netns <namespace>
alias: ils
※vethの場合、両方のnicをupにしないと機能しない。
# ネットワークインターフェースの削除
ip link del <nic>
alias: ild
※vethを削除する時は片方を指定すれば、1本削除できる。
■ip address コマンド = IPアドレスを管理するコマンド
# NICにIPアドレスを追加する。再起動すると消える。
ip address add xxx.xxx.xxx.xxx dev <nic>
alias: iaa
※nicにip addressを追加する時は、namespaceにicをsetしてからにする。
省略形: ip addr
■ip route コマンド = ルーティングテーブルを管理するコマンド
# ルートテーブルに新しいルートを追加
ip route add
alias: ira
ira default via xxx.xxx.xxx.xxx ※デフォルトルートの追加。
デフォルトルート = ルーティングテーブルに無いIPアドレスは、全てデフォルトゲートウェイに送られる。デフォルトゲートウェイとも言う。
ine router1 sysctl net.ipv4.ip_forward=1 ※IPフォワードを有効(1)にする。無効は(0)。
/etc/sysctl.conf に net.ipv4.ip_forward=1 と書き、ネットワークを再起動するでもOK
IPフォワード = 2つのNICの間でパケットを転送する技術。
net.ipv4.ip_forward=1 を設定することで、IPv4のルーターとして動作する。このパラメータが0だと、ルーターとして動作しない。
[host1]+-------------------------+[router]+-------------------------+[host2]
# ルートテーブルのルートを一覧表示
ip route show
alias: irs
# ルートテーブルのルートを削除
ip route delete
alias: ird
veth とは = 仮想的なNIC(ネットワークインターフェース)。vethを作成すると2つの仮想NICのペアができ、この2つの間で通信ができるようになる。
ネットワークインターフェースにはUP(有効)とDOWN(無効)のステータスがある。