Linuxのiptablesを使ってDNATするやり方メモです。(時々やるので忘れてしまいがち…)
環境
項目 | バージョン |
---|---|
OS | CentOS7.5 |
clientからnat-serverを経由してwebへアクセスします。
DNAT設定
パケット転送を有効化
パケット転送をオンにします。
1 2 3 |
[root@nat-server ~]# sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 |
ただし、このやり方だとOSが再起動した場合にリセットされるので恒久的にする場合は以下のように設定フィアルに書き込んで反映させます。
反映後に設定が有効かされたか確認します。
1 2 3 4 5 6 7 |
[root@nat-server ~]# vi /etc/sysctl.d/99-ipv4_ip_forward.conf net.ipv4.ip_forward=1 [root@nat-server ~]# sysctl -p /etc/sysctl.d/99-ipv4_ip_forward.conf net.ipv4.ip_forward = 1 [root@nat-server ~]# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 |
DNAT設定
DNATの設定を入れます。
1 2 |
[root@nat-server ~]# iptables -t nat -A PREROUTING -p tcp -d 192.168.100.1 --dport 80 -j DNAT --to-destination 192.168.0.117:80 |
ただ、この設定だと 192.168.100.1(nat-server)
の 80
に来た通信は 192.168.0.117(web)
の 80
へ転送されますが、戻りが 192.168.100.2(client)
になっているためwebにルーティングを追加してあげる必要があります。
ここでは 192.168.0.118
アドレスの変換をしたいので以下のSNAT設定を入れます。
SNAT設定
1 2 |
[root@nat-server ~]# iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.117 --dport 80 -j SNAT --to-source 192.168.0.118 |
動作確認
テスト用コンテンツ作成
webで以下のコンテンツを作成します。
1 2 3 4 5 6 7 8 |
[root@web ~]# cd /var/www/html/ [root@web html]# vi index.html <html> <body> This is Test Message. </body> </html> |
接続テスト
clientから以下のコマンドを実行します。
1 2 3 4 5 6 7 |
[root@client ~]# curl -X GET http://192.168.100.1/index.html <html> <body> This is Test Message. </body> </html> |
ログ確認
webのログを確認してみます。
1 2 3 |
[root@web html]# tail -f /var/log/httpd/access_log 192.168.0.118 - - [25/Nov/2018:15:01:44 +0900] "GET /index.html HTTP/1.1" 200 68 "-" "curl/7.29.0" |
IPが変換されてアクセスされていることが確認できました 🙂