NAPT,踏み台,jump,ネットワーク

内部ネットワークを作成する意味

現在の研究室ではOS Ubuntu18.04のVMでDNSとDHCPが稼働しています. VM上でDNSとDHCPを稼働させるのではなく,コンテナとして稼働させる方針に決まりました. しかしDHCPを同じネットワーク上で2台稼働させるのは,問題が発生します. DHCP同士の衝突が発生し,正常な通信ができなくなってしまいます. そこで研究室内に更に内部のネットワークを構成することにしました.

separated-network.png (380.9 kB)

このように構成することで,DNS・DHCPは互いに干渉し合うことがなくなります.

ハードウェアの設定

ハードウェアとして以下の要素は192.168.100.0/24と192.168.160.0/24のネットワークを中継するJampサーバと192.168.160.0/24のIPアドレスを持つDNS, DHCPサーバの2つとなります.

ただ2つのサーバを用意するだけではいけません.そこで必要になるのが仮想Nicと仮想スイッチです.

仮想Nicと仮想スイッチという言葉がありますが,そもそもNicとスイッチとはなんでしょう.NicはNetwork Interface Cardの略でコンピュータに取り付けるインターフェースです.仮想NicはVM上で使用されるインターフェースになります.簡単に言えば接続するための入り口だと思ってください.スイッチは通信を目的の機器に送るためのハードウェアのことを言います.それをVM間で行うのが仮想スイッチです. 参考URL https://atmarkit.itmedia.co.jp/icd/root/16/25168116.html https://www.sanwa.co.jp/product/network/lanhub/info.html

以下の具体例を見てみましょう! 図中のens37と160が仮想NicでVM Networkと@etworkが仮想スイッチです.ネットワークが違う(192.168.100.0/24と192.168.160.0/24)に接続するためにはJampサーバ,DNS, DHCPサーバだけではできないことがわかります. スクリーンショット 2023-11-25 16.40.12.png (134.1 kB)

上の図を見るとJumpサーバに仮想Nicが2つあります.これはなぜかというとVM NetworkとDNS・DHCP NetworkごとにNicが必要になるためです.これがないとJumpサーバにsshできてもDNS・DHCPサーバにsshできません.

これを踏まえて作るものは以下の4つとなります. 1. Jumpサーバ,DNS・DHCPサーバ 1. 仮想Nic 1. 仮想スイッチ

では一つずつ作りましょう!

ますはJumpサーバ,DNS・DHCP用のVMをそれぞれ立てます.立て方は以下のesa記事を参考にしてください.ここでは資料通りにVMを作成します. https://cdsl-tut.esa.io/wiki/121

作成できたら次に仮想Nicと仮想スイッチを追加します.(ハードウェアの手順は以下の記事にまとめました!) https://cdsl-tut.esa.io/wiki/1435

ソフトウェアの設定

Jump Serverの役割

DNS DHCPをテスト環境のネットワークに作成することで現在稼働しているサーバとの干渉が起きなくなることについて触れましたが,Jump Serverはここでは何をするのでしょう? Jump Serverは一般的には以下の用途で使用されます. 以下はlinkから引用したものです. Jump server definition

Jump server refers to a secure computer that spans two or more networks, allowing users to connect to it from one network, and then “jump“ to another network. It’s also known as a jump host or a jump box.

Jump servers are used to manage and control access between networks, often serving as a gateway from a less trusted network (like a public network into a more trusted network (like an internal company network).

In cybersecurity, a jump server is similar to a VPN where a secure connection is established between the user and the server, but the jump server also provides additional layers of security like auditing features.

要約すると, ジャンプサーバーは異なるネットワーク間で安全な接続を提供し, 信頼性の低いネットワークから高いネットワークへのアクセスを管理するコンピュータであり VPNに似ているが追加のセキュリティ機能を提供する.

今回のケースにとてもマッチしていますね

今回は内部(Test ENV)から外部(LAB ENV)へ接続できればOKとします. 現時点のJump Serverの役割です. Jump-server.png (362.8 kB)

理由は内部で作成したVMにdockerをインストールしたり, imageをpullする必要があるからです. よく考えたら,SSHができるようにしたいので,逆の接続も一部許可したほうが良さそうですね(ESXiのUIでVMのコマンドライン操作するのは面倒なため).

NAPTをなぜ使用する?→ UFWを使用する理由

同じような技術でNATがあるが,NATの場合,内部にある複数のサーバが同時に接続できなくなるため,NAPT(Network Address Port Translation)を使用する. Linux系でNAPTを実装する際にはIPマスカレードと呼びます. https://www.liveon.ne.jp/glossary/ip_masquerade/

IPマスカレードを使用するにはiptablesのコマンドを実行する必要があります. UFW(Uncomplicated FireWall)はiptablesのラッパー(https://ubuntu-nikki.hatenadiary.org/entry/20100921/1285077768) なため,iptablesで実行できることはUFWでも実行可能です. そこでUFWに関する設定ファイルを変更することで,NAPTの設定ができるようになります.

今回設定するファイル

ネットワーク設定用

VM(Ubuntu22.04)のIP設定を行う際,以下のコマンドを実行し,ファイルを編集する必要がある.

踏み台用VM

network:
  version: 2
  renderer: networkd
  ethernets:
    ens34: #インターネット接続用
      dhcp4: no
      addresses: [192.168.100.137/24]
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [8.8.8.8, 192.168.100.6]
    ens35: #内部ネットワーク接続用
      dhcp4: no
      addresses: [192.168.137.1/24]

内部ネットワーク接続VM

network:
  version: 2
  renderer: networkd
  ethernets:
    ens34: #念の為のインターネット接続用
      dhcp4: true
    ens35: #内部ネットワーク接続用
      dhcp4: no
      addresses:
        - 192.168.137.10/24
      routes:
        - to: default
          via: 192.168.137.1
      nameservers:
          addresses: [8.8.8.8]

設定ファイル変更後,反映させる必要があるため,以下のコマンドを実行

sudo netplan apply

NAPT設定用

今回使用するファイルは3つあります.下図はファイルの構成を示します.

file-architecture.png (302.1 kB)

それぞれのファイルは以下の役割を担っています. - /etc/default/ufw:ufwファイアウォールのデフォルト設定を定義 - /etc/ufw/sysctl.conf:カーネルのネットワークスタックに関連するパラメータを設定 - /etc/ufw/before.rules:ufwによって生成されたルールの前に適用されるカスタムiptablesルールを設定

Ubntu公式の説明がすごくわかりやすかったので,そこでの説明文も載せておきます. /lib/ufw/ufw-init→initialization script /etc/ufw/before.init→initialization customization script run before ufw is initialized /etc/ufw/after.init→initialization customization script run after ufw is initialized /etc/ufw/before[6].rules→rules file containing rules evaluated before UI added rules /etc/user[6].rules→rules file containing UI added rules (managed with the ufw command) /etc/ufw/after[6].rules→rules file containing rules evaluated after UI added rules /etc/default/ufw→high level configuration /etc/ufw/sysctl.conf→kernel network tunables /etc/ufw/ufw.conf→additional high level configuration

ということで3つのファイルを設定します.

/etc/default/ufwの設定

/etc/ufw/sysctl.confの設定

/etc/ufw/before.rulesの設定

全体構成図

最終的な全体構成図です architectue.png (377.8 kB)