Skip to content

Latest commit

 

History

History
242 lines (183 loc) · 6.14 KB

README.md

File metadata and controls

242 lines (183 loc) · 6.14 KB

netns-lab

ネームスペースでネットワーク検証

動作確認 Ubuntu 24.04

RH系もおよそ動きそう

root権限必要です

主要ツール

  • iproute2
  • iptables(nft)

最もシンプルなネットワーク


ネームスペース2つ作成

ip netns add ns1
ip netns add ns2
flowchart

%%node
    subgraph HOST[host]
    ns1
    ns2
end

%%connection
ns1 ~~~ ns2
Loading

vethペア(仮想LANケーブル)でつなげる

ip link add veth0 netns ns1 type veth0 peer netns ns2
flowchart

%%node
subgraph HOST[host]
    subgraph NS1[ns1]
        ns1-veth0[veth0]
    end
    subgraph NS2[ns2]
        ns2-veth0[veth0]
    end
end

%%connection
ns1-veth0 o--o ns2-veth0
Loading

IPアドレスとリンクアップ

ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth0
ip netns exec ns1 ip link set  veth0 up
ip netns exec ns2 ip addr add 10.0.0.2/24 dev veth0
ip netns exec ns2 ip link set  veth0 up
flowchart

%%node
subgraph HOST[host]
    subgraph NS1[ns1]
        ns1-veth0[veth0]
    end
    subgraph NS2[ns2]
        ns2-veth0[veth0]
    end
end

%%connection
ns1-veth0 o--o ns2-veth0

%%style
classDef NIC fill:#da4,color:#35d,stroke:none
class ns1-veth0,ns2-veth0 NIC
Loading

接続確認するコマンド例

ip netns exec ns1 ping -c 3 10.0.0.2
ip netns exec ns1 ip addr  # IPアドレス
ip netns exec ns1 ip link  # インターフェイス
ip netns exec ns1 ip nei   # 隣接するインターフェイス
ip netns exec ns1 ip route # ルーティングテーブル

ネームスペースを削除

ip netns delete ns1     #個別に削除する場合
ip netns delete ns2
ip --all netns delete   #まとめて全部のnetnsを削除する場合

Script

vethペア接続

ブリッジ接続

ルーティング

スクリプトの検索

grep -ril <keyword> .

keywords: nat, vlan, route, routing, bridge, subnet, bond, docker


nsfunc

一般ユーザでscriptディレクトリにいる場合

sudo su
source nsfunc.sh

# ネームスペースのIPアドレス表示
nsinfo               # すべてのネームスペース
nsinfo ns1 ns5 rt3   # 引数でネームスペース指定

# ネームスペースと関連するブリッジ、ファイルを削除
rmns

もしくは/root/.bashrc等に追記すると便利かもしれません

ホストArchlinux

Archlinuxでvethペア作成できない?
デフォルトではモジュール読み込まれないみたい

# ip link add veth0 type veth peer name veth1
Error: Unknown device type.

# lsmod | grep veth

読み込みのファイル作成したらvethペアできた

# modprobe -c | grep veth
alias rtnl_link_veth veth

# echo "rtnl_link_veth" > /etc/modules-load.d/rtnl_link_veth.conf

カーネルモジュール ArchWiki

bondingできない - Archlinux


今後追加してみたいスクリプト

  • LXC/LXDとつなげる
  • パケットフィルタリング iptables(nft)
  • 帯域制限シミュレーション
  • 動的ルーティング: BGP RIP OSPF
  • トンネリング
  • IP v4/v6 over IP v4/v6
  • DHCP DNS

iptableslegacyらしいけどまだまだiptablesいけます! そのうちにnftablesも対応するかも知れません Chapter 10. Getting started with nftables


参考資料

Introduction to Linux interfaces for virtual networking

iproute2の各種インターフェイス、bridge, vlan, vethなど図解とサンプル


Network namespaceによるネットワークテスト環境の構築

基本的なネットワーク


Network Namespace - CUBE SUGAR CONTAINER

各種ルーティング、C言語でネームスペース作成とか 「Linuxで動かしながら学ぶTCP/IPネットワーク入門」著者の方


ネットワーク勉強まとめ

FRRoutingでOSPFなどなど...


Manpages of iproute2 in Debian unstable