【Ubuntuのルーター化】仮想環境で学ぶパケット転送とルーティング設定

Ubuntu Serverをルーター化して、Linuxルーターを構築する

Ubuntuをルーター化するには、複数のネットワークインターフェースを割り当てたうえで、固定IPアドレスやIPv4パケット転送、各端末のルーティングを適切に設定する必要があります。

本記事では、仮想環境上のUbuntu Serverに2枚のNICを割り当て、異なるネットワーク間の通信を中継するLinuxルーターを構築する手順を解説します。

Linuxルーターの構築手順
  1. ネットワークインタフェース設定
  2. 固定IPアドレス設定
  3. IPv4パケット転送の有効化

構築後は、tracerouteを用いて通信経路を確認します。あわせて、Linuxルーターを通過する通信パケットをtcpdumpで可視化し、ネットワーク間のパケット転送が正常に行われていることを検証します。

検証環境で実際に使用したコマンドと実行結果を交えながら、具体的に解説しています。

目次

本記事で構築するネットワーク構成

本記事で構築するネットワーク構成は、以下のとおりです。

本記事で構築するネットワークの構成図

用途によって必要となるネットワーク構成は異なります。そのため本記事では、幅広い用途に応用できるよう、最も基本的なネットワーク構成を取り上げます。

今回のネットワーク構成では、Kali LinuxとDebianがそれぞれ異なるネットワークに所属しているため、直接通信できません。

  • 192.168.10.0/24:Kali Linux側のネットワーク
  • 192.168.20.0/24:Debian側のネットワーク

そこで、両方のネットワークに接続したUbuntu Serverを中継ルーター(Linuxルーター)として構成し、ネットワーク間のパケット転送を行います。

具体的には、Ubuntuに2枚の仮想NICを割り当て、各NICをそれぞれのネットワークに接続します。そして、UbuntuのIPv4パケット転送を有効化し、Kali LinuxとDebianにスタティックルートを設定することで、異なるネットワーク間の通信を実現します。

また、以下の記事では、ソフトウェアルーター「VyOS」を利用したネットワーク間通信について解説しています。あわせてご覧ください。

仮想化ソフトウェアとネットワークモード

仮想化ソフトウェアには、「Oracle VirtualBox」を使用します。

VirtualBoxの機能に関する箇所には、そのことが分かるよう記載しています。ほかの仮想化ソフトウェアをご利用の場合は、ご利用の環境に合わせて適宜読み替えてください。

ネットワークモードは、「ホストオンリーネットワーク」を使用します。

ホストオンリーネットワークは、VirtualBox上に独立した仮想ネットワークを構築するネットワークモードです。同じホストオンリーネットワークに接続した仮想マシン同士は通信できますが、異なるホストオンリーネットワーク間では通信できません。

仮想マシン一覧

本記事で使用する仮想マシンとネットワーク設定は、以下のとおりです。

仮想マシン役割インターフェースIPアドレス所属ネットワーク
Kali Linux送信元マシンeth0192.168.10.11192.168.10.0/24
Ubuntu ServerLinuxルーターenp0s3192.168.10.254192.168.10.0/24
  〃  〃enp0s8192.168.20.254192.168.20.0/24
Debian GNU/Linux送信先マシンenp0s8192.168.20.107192.168.20.0/24

各仮想マシンの役割は、次のとおりです。

  • Kali Linuxは、192.168.10.0/24側の通信端末として使用します。最終的には、Kali LinuxからDebianに対してtraceroutepingを実行し、Ubuntu Serverで構築したLinuxルーターを経由して通信していることを確認します。
  • Ubuntu Serverは、2つのネットワークを接続するLinuxルーターとして使用します。(本記事のメインテーマ)
  • Debian GNU/Linuxは、192.168.20.0/24側の通信端末として使用します。

本記事の検証環境では、送信元マシンにKali Linux(※)、送信先マシンにDebianを使用します。ただし、これらのディストリビューションは必須ではありません。スタティックルートを追加でき、tracerouteおよびpingを実行できる環境であれば、ほかのOSでも問題ありません。

送信元マシンおよび送信先マシンには、NICを1つ用意し、ホストオンリーアダプターを割り当てます。VirtualBoxのNATアダプターは、仮想マシンからインターネットへ接続する場合に便利ですが、本記事の目的はUbuntuで構築したLinuxルーターを経由したネットワーク間通信です。NATアダプターを追加すると、NAT側にデフォルトゲートウェイが設定され、通信経路が分かりにくくなることがあります。そのため、ホストオンリーネットワークだけで構成し、通信経路を明確にします。

※ Kali Linuxは、セキュリティ診断に特化したLinuxディストリビューションです。無料で使用でき、ネットワーク調査ツールも多数プリインストールされています。

本記事で解説すること

前提条件

本記事では、以下の内容を前提に解説しています。

前提条件本記事の検証環境の場合
ホストマシンに仮想化ソフトウェアをインストール済みであること。Oracle VirtualBox 7.2
仮想環境にネットワークを2つ作成済みであること。192.168.10.0/24
192.168.20.0/24
仮想環境に送信元マシンをインストールし、固定IPアドレスを設定済みであること。Kali Linux 2026.1
192.168.10.11/24
仮想環境に送信先マシンをインストールし、固定IPアドレスを設定済みであること。Debian GNU/Linux 13.5
192.168.20.107/24
仮想環境にUbuntu Serverをインストール済みであること。(IPアドレスは未設定でも可)Ubuntu Server 26.04 LTS
各仮想マシンのファイアウォールを無効化している。無効化
各仮想マシンにデフォルトゲートウェイを設定しない。設定しない

本記事で解説すること

上記の前提条件を踏まえ、本記事では以下の内容を解説します。

本記事で解説すること
  • Ubuntu Serverのルーター化
    • Ubuntuに2枚のNICを割り当てる
    • 2枚のNICに固定IPアドレスを設定する
    • IPv4パケット転送機能を有効化する
  • 送信元・送信先マシンのルーティング設定
    • Kali Linux、およびDebianにスタティックルートを設定する
  • 疎通確認
    • tracerouteを使用して、通信がUbuntuを経由していることを確認する
    • pingtcpdumpを使用して、Ubuntuが転送するICMPパケットを可視化する

Ubuntu Serverのルーター化

このセクションが本記事のメインテーマです。

Kali Linux(192.168.10.11)とDebian(192.168.20.107)は異なるネットワークに属しているため、同一セグメント内の端末のように直接通信することはできません。

そこで、このセクションではUbuntu Serverを用いてLinuxルーターを構築し、異なるネットワーク間のパケット転送を実現します。

Ubuntu Serverルーター化の流れ
  • ルーター用に2枚のNICを割り当てる
  • ルーター用の固定IPアドレスを設定する
  • IPv4パケット転送を有効化する

ルーター用に2枚のNICを割り当てる

Ubuntu ServerをLinuxルーターとして動作させるには、異なるネットワークセグメントにそれぞれ接続するNIC(ネットワークインターフェースカード)が必要です。

NICが1枚しかない場合、Ubuntuは一方のネットワークにしか属せないため、もう一方のネットワーク宛てのパケットを受け取ることも転送することもできません。2枚のNICを用意し、それぞれ別のネットワークに接続することで、Ubuntuが両ネットワークの「橋渡し役」として機能できるようになります。これは物理ルーターも同じ原理であり、WAN側とLAN側で別々のインターフェースを持つのと本質的に同じ構造です。

ここでは、Ubuntuの仮想マシンに2枚のNICを割り当てます。設定作業は、仮想化ソフトウェアの管理画面で行います。

VirtualBoxを使用する場合の設定例

VirtualBoxのネットワークアダプター接続先ネットワークネットワークアドレス
アダプター1Kali Linux側のホストオンリーネットワーク192.168.10.0/24
アダプター2Debian側のホストオンリーネットワーク192.168.20.0/24

Ubuntuを2つのネットワークに接続することで、Kali Linuxから送信されたパケットをDebian側のネットワークへ転送できる構成になります。

VirtualBoxを使用する場合、事前にUbuntu(仮想マシン)をシャットダウンしてください。仮想マシンが起動した状態では、NICの設定変更はできません。

STEP

VirtualBoxのネットワーク設定画面を開く

Ubuntu(仮想マシン)を選択し、設定アイコンを押下して設定画面を表示します。続いて、高度メニュー内のネットワークを選択します。

VirtualBoxのネットワーク設定画面

ネットワーク設定画面では、ネットワークアダプターを個別に設定できます。本記事では「アダプター1」と「アダプター2」を使用します。

STEP

アダプター1の設定(Kali Linux側)

「アダプター1」タブを開き、以下のように設定します。

ネットワークアダプター1の設定画面
  • 「ネットワークアダプターを有効化」にチェックを入れる
  • 「割り当て」はホストオンリーアダプターを選択する
  • 「名前」は192.168.10.0/24に対応するホストオンリーアダプターを選択する(※)

※ どのアダプターが192.168.10.0/24に対応するか不明の場合、VirtualBoxのネットワークマネージャーでご確認ください。

VirtualBoxのネットワークマネージャー
STEP

アダプター2の設定(Debian側)

続いて「アダプター2」タブを開き、Debian側のネットワークを設定します。

ネットワークアダプター2の設定画面
  • 「ネットワークアダプターを有効化」にチェックを入れる
  • 「割り当て」はホストオンリーアダプターを選択する
  • 「名前」は192.168.20.0/24に対応するホストオンリーネットワークを選択する
STEP

アダプターのMACアドレスを記録する

アダプター1とアダプター2の設定画面に表示されているMACアドレスを記録しておきます。

ネットワークアダプター1のMACアドレス
ネットワークアダプター2のMACアドレス

VirtualBoxの「アダプター1」「アダプター2」が、Ubuntu上で必ずしもenp0s3enp0s8の順に割り当てられるとは限りません。Ubuntu上でどのNICがどのインターフェースに対応しているかを特定する際、MACアドレスを使用します。

ネットワークアダプターMACアドレス
アダプター1(192.168.10.0/24)080027F1F3DA
アダプター2(192.168.20.0/24)080027C8EB3B
STEP

ネットワーク設定を保存する

ネットワークアダプターの設定が完了したら、設定画面のOKボタンをクリックして設定を保存します。

VirtualBoxのネットワーク設定画面のOKボタンをクリックする

ルーター用の固定IPアドレスを設定する

本記事では、Ubuntu Serverに以下の固定IPアドレスを割り当てます。

インターフェース接続するネットワーク固定IPアドレス用途
enp0s3192.168.10.0/24192.168.10.254/24Kali Linux側のゲートウェイ
enp0s8192.168.20.0/24192.168.20.254/24Debian側のゲートウェイ
STEP

インターフェース名とMACアドレスを確認する

Ubuntu(仮想マシン)を起動した後、前述の作業で割り当てた2枚のNICが認識されているかを確認します。

$ ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp0s3           UP             08:00:27:f1:f3:da <BROADCAST,MULTICAST,UP,LOWER_UP>
enp0s8           UP             08:00:27:c8:eb:3b <BROADCAST,MULTICAST,UP,LOWER_UP>

ip -br linkコマンドでは、インターフェース名、リンク状態、MACアドレスを簡潔に確認できます。

STEP

MACアドレスを照合する

Ubuntuが認識しているインターフェースのMACアドレスと、前段の作業で確認したネットワークアダプター側のMACアドレスを照合することで、各インターフェースがどのアダプターに接続しているかを特定できます。

Ubuntuが認識しているインタフェースVirtualBoxのネットワークアダプター
enp0s3(08:00:27:f1:f3:da)アダプター1(080027F1F3DA)
enp0s8(08:00:27:c8:eb:3b)アダプター2(080027C8EB3B)
  • enp0s3は、アダプター1(192.168.10.0/24、つまりKali Linux側ネットワーク)
  • enp0s8は、アダプター2(192.168.20.0/24、つまりDebian側ネットワーク)

に接続していることが確認できます。

STEP

固定IPアドレスの設定

Ubuntu Serverでは、通常、Netplanを使用してネットワーク設定を管理します。Netplanの設定ファイルは/etc/netplanディレクトリ配下に配置されており、ファイル名は環境により異なります。

本記事の検証環境の場合、/etc/netplan/00-installer-config.yaml

編集後の設定ファイル

$ sudo cat /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    enp0s3:
      dhcp4: false
      accept-ra: false
      addresses:
      - 192.168.10.254/24
    enp0s8:
      dhcp4: false
      accept-ra: false
      addresses:
      - 192.168.20.254/24
  version: 2
  • ethernets:Ethernetインターフェースの設定
  • enp0s3:Kali Linux側ネットワークに接続するインターフェース
  • enp0s8:Debian側ネットワークに接続するインターフェース
  • dhcp4: false:DHCPによるIPアドレスの自動取得を無効化
  • accept-ra: false:IPv6のRouter Advertisementを無効化
  • addresses:インターフェースへ割り当てる固定IPアドレス
  • version: 2:Netplanの設定フォーマットのバージョン

本記事ではネットワーク間のルーティングを目的としているため、デフォルトゲートウェイやDNSサーバーは設定していません。

STEP

ネットワーク設定を反映する

設定ファイルを保存したら、netplan tryコマンドで設定を反映します。netplan applyとは異なり、netplan tryでは、実行後に120秒の確認時間が設けられています。時間内に設定を確定しなかった場合、自動的に変更前の状態へロールバックされます。

$ sudo netplan try

設定ファイルに構文エラーがある場合は、エラーメッセージが表示されます。設定内容に問題がなければ、Enterキーを押して設定を確定させます。

STEP

設定が正しく反映されたか確認する

enp0s3に192.168.10.254/24、enp0s8に192.168.20.254/24が割り当てられていれば、固定IPアドレスの設定は完了です。

$ ip -br address
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp0s3           UP             192.168.10.254/24 fe80::a00:27ff:fef1:f3da/64
enp0s8           UP             192.168.20.254/24 fe80::a00:27ff:fec8:eb3b/64

さらに、Ubuntuが2つのネットワークを直接接続されたネットワークとして認識しているか、ルーティングテーブルを確認します。

$ ip route
192.168.10.0/24 dev enp0s3 proto kernel scope link src 192.168.10.254
192.168.20.0/24 dev enp0s8 proto kernel scope link src 192.168.20.254
  • 1行目
    • 192.168.10.0/24:宛先ネットワーク
    • dev enp0s3:通信を送り出すネットワークインターフェース
    • proto kernel:手動ではなくLinuxカーネルによって自動的に生成された経路
    • scope link:同一リンク内(直接接続されたネットワーク)
    • src 192.168.10.254:送信元IPアドレス
  • 2行目は省略

192.168.10.0/24がenp0s3へ、192.168.20.0/24がenp0s8へ関連付けられていれば、Ubuntu自身は両方のネットワークへ直接パケットを送信できます。しかし、Ubuntuの初期設定ではパケット転送機能が無効になっているため、異なるネットワーク間でパケットを転送できません。次のセクションでは、この機能を有効化する手順を解説します。

IPv4パケット転送を有効化する

2つのネットワークインターフェースを構成しただけでは、Kali LinuxとDebian間のパケットを転送できません。Ubuntuをルーターとして動作させるには、IPv4パケット転送機能を有効にする必要があります。

IPv4パケット転送はLinuxカーネルが提供する機能で、Ubuntu Serverではデフォルトで無効になっています。

STEP

IPv4パケット転送機能の状態確認

最初に、IPv4パケット転送の状態を確認します。

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

または

$ cat /proc/sys/net/ipv4/ip_forward
0
  • 0:無効(IPv4パケットを転送しない)
  • 1:有効(IPv4パケットを転送する)

無効の場合、enp0s3(192.168.10.0/24側)で受信したパケットをenp0s8(192.168.20.0/24側)に転送できません。

STEP

IPv4パケット転送の有効化

/etc/sysctl.dディレクトリに設定ファイルを新規作成し、IPv4パケット転送を有効化します。

例)/etc/sysctl.d/99-router.confを作成する場合

$ echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-router.conf

$ cat /etc/sysctl.d/99-router.conf
net.ipv4.ip_forward = 1

ファイル名は、任意の名称で問題ありません。ここでは、99-router.confを使用します。

OS起動時に/etc/sysctl.d/99-router.confが読み込まれるため、この設定はサーバーを再起動しても自動適用されます。

STEP

設定を反映する

以下のコマンドを実行して、/etc/sysctl.dディレクトリの設定ファイルを読み込み、実行中のカーネルに反映します。

$ sudo sysctl --system
STEP

設定変更後の状態確認

設定を反映した後、IPv4パケット転送が有効になったことを確認します。

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

または

$ cat /proc/sys/net/ipv4/ip_forward
1

IPv4パケット転送が有効になると、enp0s3で受信したパケットをenp0s8へ転送できるようになります。

送信元・送信先マシンのルーティング設定

Kali LinuxとDebianは異なるネットワークに属しているため、通信を行うには各マシンにスタティックルートを設定する必要があります。

仮想マシン設定するスタティックルートの内容
Kali LinuxDebian側のネットワーク(192.168.20.0/24)宛ての通信をUbuntu(192.168.10.254)へ送信する
DebianKali Linux側のネットワーク(192.168.10.0/24)宛ての通信をUbuntu(192.168.20.254)へ送信する

ネットワーク通信を確立するには、往路だけでなく復路のルーティング設定も必要です。戻りのルート(復路)がない場合、Kali Linuxから送信したパケットがDebianに到達しても、DebianからKali Linuxへ応答を返せません。

Kali Linuxのルーティング設定

次はKali Linuxにスタティックルートを設定します。スタティックルートを一時的に追加して動作検証するだけなら、以下のコマンドでも追加できます。

$ sudo ip route add 192.168.20.0/24 via 192.168.10.254

ただし、ip route addコマンドで追加したルートは一時的な設定です。OSを再起動すると設定が削除されるため、継続して使用するには永続化の設定が必要です。

当サイトの検証環境に構築しているKali Linuxは、ネットワーク設定を/etc/network/interfacesファイルで管理しているため、同ファイルにスタティックルートを追加して、再起動後も設定が保持できるようにします。

STEP

現在のネットワーク設定を確認する

まず、Kali Linuxの現在のネットワーク設定を確認します。

# IPアドレス
$ ip -br address
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.10.11/24 fe80::a00:27ff:fe79:3a0a/64

# ルーティングテーブル
$ ip route
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.11

192.168.10.0/24(自セグメント)宛てのルートのみ設定されています。

  • 192.168.10.0/24:宛先ネットワーク
  • dev eth0:パケットを送信するインターフェース
  • proto kernel:カーネルがインターフェースのIPアドレスから自動生成したルート
  • scope link:同一リンク上(つまり同じLAN内)に存在する宛先
  • src 192.168.10.11:通信時に使用する送信元IPアドレス

192.168.20.0/24(Debianが属するセグメント)宛てのルートが存在しないため、Debianとは通信できない状態です。

STEP

現在の状態で疎通確認を行う

Kali LinuxからDebianまでの通信経路をtracerouteコマンドで確認します。

$ traceroute 192.168.20.107
traceroute to 192.168.20.107 (192.168.20.107), 30 hops max, 60 byte packets
connect: ネットワークに届きません

Kali Linuxに192.168.20.0/24宛ての経路が設定されていないため、パケットを送信できず、接続に失敗します。

STEP

スタティックルートを追加する

/etc/network/interfacesファイルにpost-uppre-downを追記することで、インターフェース起動時にスタティックルートを自動追加し、停止時に自動削除できます。

eth0の設定に、以下の2行を追加します。

post-up ip route add 192.168.20.0/24 via 192.168.10.254 dev eth0
pre-down ip route del 192.168.20.0/24 via 192.168.10.254 dev eth0
  • post-up:eth0が起動した後に指定したコマンドを実行する
  • ip route add 192.168.20.0/24:192.168.20.0/24へのルートを追加する
  • via 192.168.10.254:ネクストホップとしてUbuntuを指定する
  • dev eth0:パケットを送信するインターフェース(省略可)
  • pre-down:eth0を停止する前に指定したコマンドを実行する
  • ip route del ...:追加したルートを削除する

固定IPアドレスを含めた設定例は、以下のとおりです。

auto eth0
iface eth0 inet static
    address 192.168.10.11
    netmask 255.255.255.0
    post-up ip route add 192.168.20.0/24 via 192.168.10.254 dev eth0
    pre-down ip route del 192.168.20.0/24 via 192.168.10.254 dev eth0

この設定により、Kali Linuxは192.168.20.0/24宛てのパケットをUbuntuの192.168.10.254へ送信します。

STEP

ネットワークインターフェースの再起動

設定を反映するため、eth0を再起動します。

$ sudo ifdown eth0 && sudo ifup eth0
STEP

追加したルーティングテーブルを確認する

eth0の再起動が完了したら、ルーティングテーブルに変更が反映されているか確認します。

$ ip route
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.11
192.168.20.0/24 via 192.168.10.254 dev eth0

正常に設定されている場合は、192.168.20.0/24へのルートが表示されます。

  • 192.168.20.0/24:宛先ネットワーク
  • via 192.168.10.254:ネクストホップとなるゲートウェイ
  • dev eth0:送信に使用するネットワークインターフェース

Debianのルーティング設定

Kali Linuxと同様、Debianにもスタティックルートを設定します。

本記事で使用するDebianは最小構成で構築しているため、ネットワーク設定は/etc/network/interfacesを採用しています。

STEP

現在のネットワーク設定を確認する

まず、設定前のDebianのネットワーク設定を確認します。

# IPアドレス
$ ip -br address
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp0s3           UP             192.168.20.107/24 fe80::a00:27ff:feb7:f977/64

# ルーティングテーブル
$ ip route
192.168.20.0/24 dev enp0s3 proto kernel scope link src 192.168.20.107

Debianが認識しているルートは 192.168.20.0/24のみです。Kali Linux側(192.168.10.0/24)へのルートが存在しないため、Kali Linux宛てのパケットは送信できません。

STEP

現在の状態で疎通確認を行う

スタティックルートを追加する前に、DebianからKali Linuxへtracerouteを実行します。

$ traceroute 192.168.10.11
traceroute to 192.168.10.11 (192.168.10.11), 30 hops max, 60 byte packets
connect: Network is unreachable

この時点では、Debianのルーティングテーブルに192.168.10.0/24宛ての経路がないため、Kali Linuxに到達できません。

STEP

スタティックルートを追加する

一時的なスタティックルートはip route addコマンドで追加できますが、コマンドで追加したルートはOSを再起動すると失われます。再起動後もルートを維持するため、ネットワーク設定ファイルである/etc/network/interfacesに設定を追加します。

具体的には、enp0s3の設定ブロックにpost-uppre-downの2行を追記します。

例)/etc/network/interfacesenp0s3のみ抜粋

auto enp0s3
iface enp0s3 inet static
    address 192.168.20.107
    netmask 255.255.255.0
    post-up ip route add 192.168.10.0/24 via 192.168.20.254 dev enp0s3
    pre-down ip route del 192.168.10.0/24 via 192.168.20.254 dev enp0s3
  • post-up:インターフェースが起動した後に実行するコマンドを指定する
  • ip route add 192.168.10.0/24 via 192.168.20.254 dev enp0s3:192.168.10.0/24宛てのパケットをUbuntu(192.168.20.254)経由で転送するルートを追加する
  • pre-down:インターフェースが停止する前に実行するコマンドを指定する
  • ip route del 192.168.10.0/24 via 192.168.20.254 dev enp0s3:インターフェース停止時に上記ルートを削除する
STEP

ネットワークインターフェースの再起動

/etc/network/interfacesの変更を反映するため、enp0s3を再起動します。

$ sudo ifdown enp0s3 && sudo ifup enp0s3
STEP

追加したルーティングテーブルを確認する

設定反映後、ルーティングテーブルに192.168.10.0/24への経路が追加されているかを確認します。

$ ip route
192.168.10.0/24 via 192.168.20.254 dev enp0s3
192.168.20.0/24 dev enp0s3 proto kernel scope link src 192.168.20.107

192.168.10.0/24 via 192.168.20.254 dev enp0s3の行が追加されていれば、スタティックルートの設定は成功です。これにより、Debianは192.168.10.0/24宛てのパケットをUbuntu(192.168.20.254)に送信できる状態になりました。

疎通確認(ルーターを経由しているか)

ここまでの設定で、Ubuntuのルーター化、Kali LinuxとDebianへのスタティックルート追加が完了しました。最後に、Kali LinuxからDebianへの通信がUbuntuを経由しているかを2つの方法で検証します。

  • 【疎通確認 1】tracerouteを実行し、宛先までの通信経路を確認する
  • 【疎通確認 2】pingを実行し、Ubuntuを通過するパケットをキャプチャする

【疎通確認 1】通信経路を確認する

Kali LinuxからDebianに向けてtracerouteを実行します。

Kali Linuxのターミナルで実行

$ traceroute 192.168.20.107
traceroute to 192.168.20.107 (192.168.20.107), 30 hops max, 60 byte packets
 1  192.168.10.254 (192.168.10.254)  0.462 ms  0.429 ms  0.415 ms
 2  192.168.20.107 (192.168.20.107)  0.733 ms  0.719 ms  0.691 ms
  • 1ポップ目:192.168.10.254(Ubuntuを経由)
  • 2ポップ目:192.168.20.107(Debianに到達)

Kali Linuxから送信されたパケットは、Ubuntuをルーターとして経由して、宛先であるDebianに届いていることが確認できました。

【疎通確認 2】ルーターを通過するパケットをキャプチャする

パケットキャプチャツール「tcpdump」を使用して、Ubuntuを通過するICMPパケットをキャプチャします。

STEP

パケットキャプチャの開始

Ubuntuのターミナルで以下のコマンドを実行し、ICMPパケットのキャプチャを開始します。

Ubuntuのターミナルで実行

$ sudo tcpdump -i any icmp
  • sudo:パケットキャプチャに必要な管理者権限で実行する
  • tcpdump:パケットキャプチャコマンド
  • -i any:すべてのネットワークインターフェース(enp0s3/enp0s8)を監視する
  • icmp:ICMPプロトコルのパケットのみを表示する

コマンドを実行すると、以下のメッセージが表示され、パケットの待ち受け状態になります。

tcpdump: WARNING: any: That device doesn't support promiscuous mode
(Promiscuous mode not supported on the "any" device)
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes

このターミナルは終了せず、そのままパケットキャプチャを継続してください。

Ubuntuにtcpdumpがインストールされていない場合は、aptコマンドでインストールします。

$ sudo apt update
$ sudo apt install tcpdump
STEP

Kali LinuxからDebianにpingを送信する

Kali Linuxのターミナルで、Debianに向けてpingを送信します。

Kali Linuxのターミナルで実行

$ ping -c 1 192.168.20.107
PING 192.168.20.107 (192.168.20.107) 56(84) bytes of data.
64 bytes from 192.168.20.107: icmp_seq=1 ttl=63 time=0.978 ms

--- 192.168.20.107 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.978/0.978/0.978/0.000 ms

ここでは、-c 1を指定してICMP Echo Requestを1回送信します。

STEP

Ubuntuでキャプチャ内容を確認する

Kali Linuxからpingを実行すると、Ubuntuで動作しているtcpdumpに、以下のパケットが表示されます。

Ubuntuのターミナル

17:09:50.131931 enp0s3 In  IP 192.168.10.11 > 192.168.20.107: ICMP echo request, id 18349, seq 1, length 64
17:09:50.131955 enp0s8 Out IP 192.168.10.11 > 192.168.20.107: ICMP echo request, id 18349, seq 1, length 64
17:09:50.132408 enp0s8 In  IP 192.168.20.107 > 192.168.10.11: ICMP echo reply, id 18349, seq 1, length 64
17:09:50.132412 enp0s3 Out IP 192.168.20.107 > 192.168.10.11: ICMP echo reply, id 18349, seq 1, length 64

各パケットの内容

インターフェース方向送信元 → 宛先パケット
1行目enp0s3In(受信)192.168.10.11
→ 192.168.20.107
ICMP Echo Request
2行目enp0s8Out(送信)192.168.10.11
→ 192.168.20.107
ICMP Echo Request
3行目enp0s8In(受信)192.168.20.107
→ 192.168.10.11
ICMP Echo Reply
4行目enp0s3Out(送信)192.168.20.107
→ 192.168.10.11
ICMP Echo Reply

Kali Linuxから送信されたICMP Echo Requestは、最初にUbuntuのenp0s3へ入ります。その後、Ubuntuのルーティング処理によってenp0s8からDebianへ送信されます。

応答パケットは逆方向です。Debianが送信したICMP Echo Replyenp0s8に入り、enp0s3からKali Linuxへ転送されます。

これにより、Ubuntuが2つのネットワーク間でIPv4パケットを転送するルーターとして正常に機能していることが、パケットレベルで証明されました。

まとめ

本記事では、仮想環境上のUbuntu ServerをLinuxルーターとして機能させ、異なるネットワークセグメントに属するKali Linux(192.168.10.11/24)とDebian(192.168.20.107/24)を通信させる手順を解説しました。

実施した設定を振り返ると、大きく3つのステップに集約されます。

STEP

Ubuntu Serverのルーター化

2枚のNICにそれぞれ異なるネットワークセグメントの固定IPアドレスを割り当て、設定ファイルにnet.ipv4.ip_forward = 1を記述してIPv4パケット転送を有効化しました。この設定により、Ubuntu Serverは2つのネットワークを中継するLinuxルーターとして動作します。

STEP

各クライアントのルーティング設定

Kali Linux、Debianにスタティックルートを追加しました。

STEP

疎通確認

設定後はtracerouteだけでなく、pingtcpdumpを組み合わせて疎通確認を行いました。

tracerouteでは通信経路上にUbuntu Serverが含まれていることを確認し、tcpdumpではUbuntu ServerがICMPパケットを一方のインターフェースから受信し、もう一方へ転送していることを確認しました。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次