テストのために、あるインターフェイスからパケットを送信し、別のインターフェイスからパケットを受信します。

テストのために、あるインターフェイスからパケットを送信し、別のインターフェイスからパケットを受信します。

Ubuntu 16.04.6 LTSで作成したDHCPクライアントをテストしたいと思います。私のラップトップでローカルでこれをやりたいです。つまり、内部的にDHCPパケットを送受信します。

私が試したことは次のとおりです。

  • 2 つの仮想インターフェイスが作成されますdummy0dummy1
  • 次の 2 つのインターフェイスに対してブリッジが作成されます。br0

目的は、dummy0インターフェースでDHCP検索を送受信することですdummy1。インターフェイスはDHCP検索を送信しましたが、残念ながらdummy0インターフェイスにパケットは表示されません。dummy1受信できる場合は、次のステップはDHCPサーバーを実行してdummy1クライアントの動作をテストすることです。

wiresharkインターフェイスにDHCP検索が表示されます。dummy0私はオンラインで何も見たことがありませんdummy1。また:でパケットを見ましたbr0

もっと良い方法があるようですが、どうするか教えてください。

ベストアンサー1

「ブーメランパケット」(あるローカルインターフェイスから放出され、別のインターフェイスで受信される)は、ルーティングエラー(どこかでループ)と見なされ、デフォルトではカーネルによって破棄されます。

さらに、仮想デバイスを使用するのも面倒です。

より良いアプローチ:ネットワークネームスペースを1つ(または2つ)作成し、ネットワークネームスペースとデフォルトネームスペース(または両方のネットワークネームスペースの両方)の間にvethペアを配置することです。ブリッジは必要ありません。次に、必要なものすべてをテストします。

xterm人生を簡単にするには、各ネームスペースで1つずつ実行してください。

これを行うために使用するスクリプトは次のとおりです。自由に修正してみてください。

#!/bin/bash

# Setup network namespace with veth pair, start xterm in it

# nsterm ns0 veth0 10.0.0 yellow 24
#
# tested: yellow, lime, orange, cyan

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

NS=${1:-ns0}
DEV=${2:-veth0}
DEV_A=${DEV}a
DEV_B=${DEV}b
ADDR=${3:-10.0.0}
ADDR_A=${ADDR}.254
ADDR_B=${ADDR}.1
MASK=${5:-24}
COL=${4:-yellow}

# echo ns=$NS dev=$DEV col=$COL mask=$MASK

ip netns add $NS
ip link add $DEV_A type veth peer name $DEV_B netns $NS
ip addr add $ADDR_A/$MASK dev $DEV_A
ip link set ${DEV}a up
ip netns exec $NS ip addr add $ADDR_B/$MASK dev $DEV_B
ip netns exec $NS ip link set ${DEV}b up
ip netns exec $NS ip link set lo up
ip netns exec $NS ip route add default via $ADDR_A dev $DEV_B
ip netns exec $NS su -c "xterm -bg $COL &" your_username

おすすめ記事