iptablesで見かけたNATって何?

iptablesでNATテーブルってあるけどこれ何?

iptablesがさっぱり不明な状態で「iptablesを設定してポートフォワードできるよにする」必要があったのでiptablesが有効になっているか確認したらTable: natって出力がありました。

$ sudo /etc/rc.d/init.d/iptables status
Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

NATはプライベートIPアドレスとパブリックIPアドレスを組合せで変換してくれます。

  • 正式名称 : Network Address Translation

https://camo.qiitausercontent.com/441f211d0a460bec29f4270ddbf1c0e090e92ef5/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3136303939332f35316164306362612d643864632d616665302d336334632d6534356563643761313462332e706e67
https://camo.qiitausercontent.com/84807767dd8cb6eac4c67e33b3e4e59a37db3d84/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3136303939332f38363661663661312d396164382d636336612d643431392d3735623237623835653239322e706e67
NATに関して可能な限り分かりやすくまとめて見た。 - Qiita

https://www.infraexpert.com/studygif/tcpipz36.gif
NAT( Network Address Translation )とは

変換するプライベートIPアドレスとパブリックIPアドレスの組合わせを管理してくれるのがNATテーブルです。

http://blog-imgs-70.fc2.com/a/y/u/ayufishing/rtxnat02s.png
NAT の理解は芋づる式 - インフラまわりのプロになりたい

https://www.infraexpert.com/studygif/tcpipz38.gif
NAT( Network Address Translation )とは

LAN内からインターネットへ出ていく時に送信元のプライベートIPアドレスをパブリックIPアドレスに変換してくれるのがソースNAT
  • 略称 : SNAT
  • 英語 : Source NAT
  • 別名 : 送信元NAT

https://camo.qiitausercontent.com/cbec96ed61552c11e57cc9770f4e8b3641124298/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3136303939332f37343331323764392d663461622d313838632d653331362d3136323264336339363336302e706e67
NATに関して可能な限り分かりやすくまとめて見た。 - Qiita

インターネットからLAN内にアクセスする時に送信先のパブリックIPアドレスをプライベートIPアドレスに変換してくれるのがデスティネーションNAT

https://camo.qiitausercontent.com/ef453e42301d02cee6a9a09ccdcb4d23283112b8/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3136303939332f37336534346230332d326262392d323635622d656566622d6264343164313239613233352e706e67
NATに関して可能な限り分かりやすくまとめて見た。 - Qiita

NATは、プライベートIPとパブリックIPを1対1の組合せで変換します。

プライベートIPはたくさん作れるけどパブリックIPをたくさん用意するのは大変です。

パブリックIPアドレスはタダじゃありません。

http://blog-imgs-70.fc2.com/a/y/u/ayufishing/rtxnat03s.png
NAT の理解は芋づる式 - インフラまわりのプロになりたい

そこで、IPマスカレード

  • 別名 : NAPT
  • 正式名称 : Network Address Port Translation
複数のプライベートIPを1つのパブリックIPに組合せられます。
なぜなら、IPアドレス+ポート番号で組合せるからです。

https://camo.qiitausercontent.com/8f2cd04f50b039a3a1af1eaef3ccc851c7977029/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3136303939332f32373462393962622d396330372d303663362d623431622d6465353030343230363166352e706e67
NATに関して可能な限り分かりやすくまとめて見た。 - Qiita

https://www.h323.jp/wp/wp-content/uploads/napt.jpg
MCU入門 第9回 NAT/FW トラバーサル③– NAT/FW トラバーサルの仕組み “NATとは” – MCU製品情報サイト VC.info

https://mo.kerosoft.com/pub/mo/image/iptables/.thumbnail/iptables-nat2.png.jpg
NAT箱の192.168.1.30:1234宛に届いたパケットを、10.0.2.50:80へ投げるというNATを書く。
# iptables -t nat -A PREROUTING -m tcp -p tcp --dst 192.168.1.30 --dport 1234 -j DNAT --to-destination 10.0.2.50:80
"10.0.2.50:80宛のパケットは、NAT箱の10.0.2.40というアドレスに付け替えてから送信する"というルールを書く。
# iptables -t nat -A POSTROUTING -m tcp -p tcp --dst 10.0.2.50 --dport 80 -j SNAT --to-source 10.0.2.40
NATのPREROUTINGを通って変換されたアドレスに対して許可ルールを書いておく。
# iptables -A FORWARD -m tcp -p tcp --dst 10.0.2.50 --dport 80 -j ACCEPT
戻りのパケットも許可する
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptablesで特定のポートを別のホストへ転送する方法 - Kerosoft : Modus Operandi