LinuxにおけるSNAT、DNATの設定方法について確認したのでメモ。
前提としては、NAT用ルータとしてではなくパケット送信する端末としての設定である。
よく使うことが想定されるのは[1-1]及び[2-1]である。
環境
[root@SYSLOG02 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@SYSLOG02 ~]# uname -a
Linux SYSLOG02.strike-lab 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
1. SNAT(送信元IPアドレスの変換)
1-1. 特定の通信先に対し、送信元のアドレスを変換する
宛先IPアドレスが[192.168.1.31]であった場合、送信元IPアドレスを[192.168.1.254]に変換する
[root@SYSLOG02 ~]# iptables -t nat -A POSTROUTING -d 192.168.1.31 -j SNAT --to-source 192.168.1.254
想定される利用シーン
システム連携先からNAT用アドレスを払い出され、NATしないといけないとき
1-2. 送信元が特定のIPである場合、送信元のアドレスを変換する
送信元IPアドレスが[192.168.1.32]であった場合、送信元IPアドレスを[192.168.1.254]に変換する
[root@SYSLOG02 ~]# iptables -t nat -A POSTROUTING -s 192.168.1.32 -j SNAT --to-source 192.168.1.254
想定される利用シーン
送信元IPアドレスを偽装したいとき(UDP限定)。
TCPの場合にこれを実行してしまうと3wayハンドシェイクを行う際におかしなことになる。
2. DNAT(宛先IPアドレスの変換)
2-1. 特定の通信先に対し、宛先のアドレスを変換する
宛先IPアドレスが[192.168.1.31]であった場合、宛先IPアドレスを[192.168.1.254]に変換する
[root@SYSLOG02 ~]# iptables -t nat -A OUTPUT -d 192.168.1.31 -j DNAT --to-destination 192.168.1.254
想定される利用シーン
グローバルIPアドレスを有するホストに対し通信をするシステムなどを検証するとき。
通信先のシステムをプライベートIPアドレスを有する端末で作成し、そのアドレスにNATさせたり。
2-2. 送信元が特定のIPである場合、宛先のアドレスを変換する
送信元IPアドレスが[192.168.1.32]であった場合、宛先IPアドレスを[192.168.1.254]に変換する
[root@SYSLOG02 ~]# iptables -t nat -A OUTPUT -s 192.168.1.32 -j DNAT --to-destination 192.168.1.254
想定される利用シーン
暫定的にすべての通信先を1箇所に向けたいとき。