エンジニア男

勉強したことの忘備録としてつらつら書いていきます。

Linux network namespaceについて

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アドレスを管理するコマンド

# NICIPアドレスを追加する。再起動すると消える。
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.confnet.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(無効)のステータスがある。