Ubuntu Serverをルーター化して、Linuxルーターを構築する
Ubuntuをルーター化するには、複数のネットワークインターフェースを割り当てたうえで、固定IPアドレスやIPv4パケット転送、各端末のルーティングを適切に設定する必要があります。
本記事では、仮想環境上のUbuntu Serverに2枚のNICを割り当て、異なるネットワーク間の通信を中継するLinuxルーターを構築する手順を解説します。
- ネットワークインタフェース設定
- 固定IPアドレス設定
- 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 | 送信元マシン | eth0 | 192.168.10.11 | 192.168.10.0/24 |
| Ubuntu Server | Linuxルーター | enp0s3 | 192.168.10.254 | 192.168.10.0/24 |
| 〃 | 〃 | enp0s8 | 192.168.20.254 | 192.168.20.0/24 |
| Debian GNU/Linux | 送信先マシン | enp0s8 | 192.168.20.107 | 192.168.20.0/24 |
各仮想マシンの役割は、次のとおりです。
- Kali Linuxは、192.168.10.0/24側の通信端末として使用します。最終的には、Kali LinuxからDebianに対して
tracerouteやpingを実行し、Ubuntu Serverで構築したLinuxルーターを経由して通信していることを確認します。 - Ubuntu Serverは、2つのネットワークを接続するLinuxルーターとして使用します。(本記事のメインテーマ)
- Debian GNU/Linuxは、192.168.20.0/24側の通信端末として使用します。
送信元マシンおよび送信先マシンには、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を経由していることを確認するpingとtcpdumpを使用して、Ubuntuが転送するICMPパケットを可視化する
Ubuntu Serverのルーター化
このセクションが本記事のメインテーマです。
Kali Linux(192.168.10.11)とDebian(192.168.20.107)は異なるネットワークに属しているため、同一セグメント内の端末のように直接通信することはできません。
そこで、このセクションではUbuntu Serverを用いてLinuxルーターを構築し、異なるネットワーク間のパケット転送を実現します。
- ルーター用に2枚のNICを割り当てる
- ルーター用の固定IPアドレスを設定する
- IPv4パケット転送を有効化する
ルーター用に2枚のNICを割り当てる
Ubuntu ServerをLinuxルーターとして動作させるには、異なるネットワークセグメントにそれぞれ接続するNIC(ネットワークインターフェースカード)が必要です。
NICが1枚しかない場合、Ubuntuは一方のネットワークにしか属せないため、もう一方のネットワーク宛てのパケットを受け取ることも転送することもできません。2枚のNICを用意し、それぞれ別のネットワークに接続することで、Ubuntuが両ネットワークの「橋渡し役」として機能できるようになります。これは物理ルーターも同じ原理であり、WAN側とLAN側で別々のインターフェースを持つのと本質的に同じ構造です。
ここでは、Ubuntuの仮想マシンに2枚のNICを割り当てます。設定作業は、仮想化ソフトウェアの管理画面で行います。
VirtualBoxを使用する場合の設定例
| VirtualBoxのネットワークアダプター | 接続先ネットワーク | ネットワークアドレス |
|---|---|---|
| アダプター1 | Kali Linux側のホストオンリーネットワーク | 192.168.10.0/24 |
| アダプター2 | Debian側のホストオンリーネットワーク | 192.168.20.0/24 |
Ubuntuを2つのネットワークに接続することで、Kali Linuxから送信されたパケットをDebian側のネットワークへ転送できる構成になります。
VirtualBoxのネットワーク設定画面を開く
Ubuntu(仮想マシン)を選択し、設定アイコンを押下して設定画面を表示します。続いて、高度メニュー内のネットワークを選択します。

ネットワーク設定画面では、ネットワークアダプターを個別に設定できます。本記事では「アダプター1」と「アダプター2」を使用します。
アダプター1の設定(Kali Linux側)
「アダプター1」タブを開き、以下のように設定します。

- 「ネットワークアダプターを有効化」にチェックを入れる
- 「割り当て」は
ホストオンリーアダプターを選択する - 「名前」は
192.168.10.0/24に対応するホストオンリーアダプターを選択する(※)
※ どのアダプターが192.168.10.0/24に対応するか不明の場合、VirtualBoxのネットワークマネージャーでご確認ください。

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

- 「ネットワークアダプターを有効化」にチェックを入れる
- 「割り当て」は
ホストオンリーアダプターを選択する - 「名前」は
192.168.20.0/24に対応するホストオンリーネットワークを選択する
アダプターのMACアドレスを記録する
アダプター1とアダプター2の設定画面に表示されているMACアドレスを記録しておきます。


VirtualBoxの「アダプター1」「アダプター2」が、Ubuntu上で必ずしもenp0s3、enp0s8の順に割り当てられるとは限りません。Ubuntu上でどのNICがどのインターフェースに対応しているかを特定する際、MACアドレスを使用します。
| ネットワークアダプター | MACアドレス |
|---|---|
| アダプター1(192.168.10.0/24) | 080027F1F3DA |
| アダプター2(192.168.20.0/24) | 080027C8EB3B |
ネットワーク設定を保存する
ネットワークアダプターの設定が完了したら、設定画面のOKボタンをクリックして設定を保存します。

ルーター用の固定IPアドレスを設定する
本記事では、Ubuntu Serverに以下の固定IPアドレスを割り当てます。
| インターフェース | 接続するネットワーク | 固定IPアドレス | 用途 |
|---|---|---|---|
| enp0s3 | 192.168.10.0/24 | 192.168.10.254/24 | Kali Linux側のゲートウェイ |
| enp0s8 | 192.168.20.0/24 | 192.168.20.254/24 | Debian側のゲートウェイ |
インターフェース名と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アドレスを簡潔に確認できます。

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側ネットワーク)
に接続していることが確認できます。
固定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: 2ethernets:Ethernetインターフェースの設定enp0s3:Kali Linux側ネットワークに接続するインターフェースenp0s8:Debian側ネットワークに接続するインターフェースdhcp4: false:DHCPによるIPアドレスの自動取得を無効化accept-ra: false:IPv6のRouter Advertisementを無効化addresses:インターフェースへ割り当てる固定IPアドレスversion: 2:Netplanの設定フォーマットのバージョン
ネットワーク設定を反映する
設定ファイルを保存したら、netplan tryコマンドで設定を反映します。netplan applyとは異なり、netplan tryでは、実行後に120秒の確認時間が設けられています。時間内に設定を確定しなかった場合、自動的に変更前の状態へロールバックされます。
$ sudo netplan try設定ファイルに構文エラーがある場合は、エラーメッセージが表示されます。設定内容に問題がなければ、Enterキーを押して設定を確定させます。
設定が正しく反映されたか確認する
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ではデフォルトで無効になっています。
IPv4パケット転送機能の状態確認
最初に、IPv4パケット転送の状態を確認します。
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
または
$ cat /proc/sys/net/ipv4/ip_forward
00:無効(IPv4パケットを転送しない)1:有効(IPv4パケットを転送する)
無効の場合、enp0s3(192.168.10.0/24側)で受信したパケットをenp0s8(192.168.20.0/24側)に転送できません。
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を使用します。
設定を反映する
以下のコマンドを実行して、/etc/sysctl.dディレクトリの設定ファイルを読み込み、実行中のカーネルに反映します。
$ sudo sysctl --system設定変更後の状態確認
設定を反映した後、IPv4パケット転送が有効になったことを確認します。
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
または
$ cat /proc/sys/net/ipv4/ip_forward
1IPv4パケット転送が有効になると、enp0s3で受信したパケットをenp0s8へ転送できるようになります。
送信元・送信先マシンのルーティング設定
Kali LinuxとDebianは異なるネットワークに属しているため、通信を行うには各マシンにスタティックルートを設定する必要があります。
| 仮想マシン | 設定するスタティックルートの内容 |
|---|---|
| Kali Linux | Debian側のネットワーク(192.168.20.0/24)宛ての通信をUbuntu(192.168.10.254)へ送信する |
| Debian | Kali Linux側のネットワーク(192.168.10.0/24)宛ての通信をUbuntu(192.168.20.254)へ送信する |
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ファイルで管理しているため、同ファイルにスタティックルートを追加して、再起動後も設定が保持できるようにします。

現在のネットワーク設定を確認する
まず、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.11192.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とは通信できない状態です。
現在の状態で疎通確認を行う
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宛ての経路が設定されていないため、パケットを送信できず、接続に失敗します。
スタティックルートを追加する
/etc/network/interfacesファイルにpost-upとpre-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へ送信します。
ネットワークインターフェースの再起動
設定を反映するため、eth0を再起動します。
$ sudo ifdown eth0 && sudo ifup eth0追加したルーティングテーブルを確認する
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のネットワーク設定を確認します。
# 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.107Debianが認識しているルートは 192.168.20.0/24のみです。Kali Linux側(192.168.10.0/24)へのルートが存在しないため、Kali Linux宛てのパケットは送信できません。
現在の状態で疎通確認を行う
スタティックルートを追加する前に、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に到達できません。
スタティックルートを追加する
一時的なスタティックルートはip route addコマンドで追加できますが、コマンドで追加したルートはOSを再起動すると失われます。再起動後もルートを維持するため、ネットワーク設定ファイルである/etc/network/interfacesに設定を追加します。
具体的には、enp0s3の設定ブロックにpost-upとpre-downの2行を追記します。
例)/etc/network/interfacesのenp0s3のみ抜粋
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 enp0s3post-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:インターフェース停止時に上記ルートを削除する
ネットワークインターフェースの再起動
/etc/network/interfacesの変更を反映するため、enp0s3を再起動します。
$ sudo ifdown enp0s3 && sudo ifup enp0s3追加したルーティングテーブルを確認する
設定反映後、ルーティングテーブルに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.107192.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パケットをキャプチャします。

パケットキャプチャの開始
Ubuntuのターミナルで以下のコマンドを実行し、ICMPパケットのキャプチャを開始します。
Ubuntuのターミナルで実行
$ sudo tcpdump -i any icmpsudo:パケットキャプチャに必要な管理者権限で実行する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 tcpdumpKali 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回送信します。
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行目 | enp0s3 | In(受信) | 192.168.10.11 → 192.168.20.107 | ICMP Echo Request |
| 2行目 | enp0s8 | Out(送信) | 192.168.10.11 → 192.168.20.107 | ICMP Echo Request |
| 3行目 | enp0s8 | In(受信) | 192.168.20.107 → 192.168.10.11 | ICMP Echo Reply |
| 4行目 | enp0s3 | Out(送信) | 192.168.20.107 → 192.168.10.11 | ICMP Echo Reply |
Kali Linuxから送信されたICMP Echo Requestは、最初にUbuntuのenp0s3へ入ります。その後、Ubuntuのルーティング処理によってenp0s8からDebianへ送信されます。
応答パケットは逆方向です。Debianが送信したICMP Echo Replyはenp0s8に入り、enp0s3からKali Linuxへ転送されます。
これにより、Ubuntuが2つのネットワーク間でIPv4パケットを転送するルーターとして正常に機能していることが、パケットレベルで証明されました。
まとめ
本記事では、仮想環境上のUbuntu ServerをLinuxルーターとして機能させ、異なるネットワークセグメントに属するKali Linux(192.168.10.11/24)とDebian(192.168.20.107/24)を通信させる手順を解説しました。
実施した設定を振り返ると、大きく3つのステップに集約されます。
Ubuntu Serverのルーター化
2枚のNICにそれぞれ異なるネットワークセグメントの固定IPアドレスを割り当て、設定ファイルにnet.ipv4.ip_forward = 1を記述してIPv4パケット転送を有効化しました。この設定により、Ubuntu Serverは2つのネットワークを中継するLinuxルーターとして動作します。
各クライアントのルーティング設定
Kali Linux、Debianにスタティックルートを追加しました。
疎通確認
設定後はtracerouteだけでなく、pingとtcpdumpを組み合わせて疎通確認を行いました。
tracerouteでは通信経路上にUbuntu Serverが含まれていることを確認し、tcpdumpではUbuntu ServerがICMPパケットを一方のインターフェースから受信し、もう一方へ転送していることを確認しました。
