1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【NAT変換】Linuxサーバー配下にプライベートIPを持った端末を管理するための準備

Last updated at Posted at 2020-06-05

NAT変換にチャレンジしてみた

演習(課題)として、2台のPCのうち一方を他方に直接つなぎ、繋がれたほうをインターネットにつなぐことによって一つをプライベート空間に配置した状態で直接インターネットにつながっていないほうからインターネットに接続せよというものにチャレンジしてみました。
理由は後述もしていますが、LANポートの数の関係でインターネットに直接繋がないほうがWindows、インターネットに直接つなぐほうがLinuxのPCです。

前提条件

windowsPCにクラスC(192.168.x.x/24)のIPアドレスを付与
LinuxPCの一方にクラスC、もう一方にクラスB(172.16.x.x/16)のIPアドレスを付与
インターネットに直接つながるゲートウェイ(ルーター)はクラスBのIPアドレスが付与されている
これらをすべてLANケーブルで1本につなぐ
通信の際のポート番号(80番ポートなど)は今は考慮しない(後ほど考慮する)。

想定する環境

用意するもの 詳細
WindowsPC バージョンは10。LANポートが1つなので今回はこちらが子になる
Linuxサーバー バージョンはCentOS8。LANポートが3つあるマシンを用いるが、今回は3つのうち2つを使用。こちらが親(子からみたときにゲートウェイの役割)。
enp7s0 サーバーのLANポートのうち、インターネット側へ電気(パケット)を流すほうのインターフェース名
enp6s0 サーバーのLANポートのうち、Windows側へ電気(パケット)を流すほうのインターフェース名 
固定IPアドレス 前提条件にあったIPアドレスをそれぞれのLANポートに付与 
その他機器 LANケーブルやハブ、ルータなど一般的なネットワーク接続に必要な機器

まずは物理マシンでやってみる。

NAT変換に関する情報は巷に溢れていますが、どれも仮想マシンを前提にしたものばかりです。
なぜなら、普通は物理マシンでこんなことはやらないから。(おそらく)

とはいえ、物理マシンで接続してみたことで、同じことを仮想マシンで行えば比較的やりやすくなるのでは
と思えたので記録しておきたいと思います。

NAT変換をどこで行うか

CentOSでは(他は知りません笑)ファイアーウォールがNAT変換を管理しています。

バージョン6以前ではiptablesというものを用いてルールを設定していたようで
こちらの記事が非常に参考になりました。

Linuxで作るファイアウォール[NAT設定編]1/2
Linuxで作るファイアウォール[NAT設定編]2/2

しかしながら、CentOS7以降ではiptablesではなくfirewalldという仕組みでルールを管理することになったようです。
道理で記事で散々使われている"iptables"なんてファイルが存在しなかったわけだ。

firewalldを用いてNAT変換を行う

こちらの記事を参考に、IPマスカレードの設定を書いていきました。

CentOS 7.x でのIPマスカレード設定
Firewalld : IPマスカレードの設定

まず、デフォルトの状態ではzoneがpublicしかありません(ないはず!)ので、enp7s0をexternal(外側)、enp6s0をinternal(内側)というようにzoneを設定します。
これはNetworkManagerを使いましょう。

# nmcli connection modify enp7s0(インターフェース名) connection.zone external
# nmcli connection modify enp6s0(インターフェース名) connection.zone internal

次に、ぞれぞれのzoneを意識しつつfirewalldの設定変更にかかります。
firewalldの設定を変更する際は基本的にsuでルートユーザーになっておきましょう。(sudoではできない操作もあります)

# firewall-cmd --zone=external --add-masquerade --permanent

これによりNAT変換で必要なIPマスカレードができます。
(iptablesの場合はNATテーブルにいろいろな設定を加えないといけなかったのがこれだけでよくなりました。科学の力ってすげー!)

ちなみにCentOS8の場合、デフォルトでIPマスカレードがonになっているらしいのでコマンドを打つ前に確認してみてもいいかもしれません。

# firewall-cmd --list-all --permanent --zone=external

masquerade:yesとなっていればOKです。

次にちょっとだけルールを入れます。(現時点では必須じゃないようです。)

# firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o enp7s0 -j MASQUERADE
# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp6s0 -o enp7s0 -j ACCEPT
# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp7s0 -o enp6s0 -m state --state RELATED,ESTABLISHED -j ACCEPT

1つ目はPOSTROUTINGの設定。NAT変換というのはヘッダ情報のIPアドレスを書き換える動きなのですが、
POSTROUTINGはそのうち送信元の情報を操作するときのルール設定です。サーバーからインターネットに出ていくときにはIPマスカレードしなさいということです。

2つ目はぷらーべーとネットワーク空間であるenp6s0側(WindouwsPCがある側)から来たパケットをenp7s0に流すことを許可するというルールです。

最後に逆向きを許可するルールを追加し、これでLinuxPCのLANポート同士がIPクラスの異なる状態で疎通が可能になりました。

NAT変換のルール設定が出来たらIPアドレスをうまく合わせる

あとは、プライベート空間同士と、親やゲートウェイのある空間同士のセグメントを間違えないようにIPアドレスを確認して完成。

今後

今後はこれを仮想マシンなどを用いて、一台ではなく複数台をサーバーの下にぶら下げる設計を作ることになります。
どこがどう変わるのか、機会があればまた書いてみたいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?