はじめに
私はLinuxを趣味で使用して10年超えの一般ユーザです。SymmetricNAT(RFC3489廃止済みにて定義)の環境を作成する手順です。
やったこと
必要な機材
- Linuxの入っているPC(仮想マシンでも可。NICが2枚あること。)
手順
下記のページを参考にNATするLinuxルータを作成します。
https://atmarkit.itmedia.co.jp/ait/articles/1002/09/news119_2.html
ポイントは、「MASQUERADE」に「–random オプション」を適用すること(手順の赤字)です。
参考のページ
https://manpages.ubuntu.com/manpages/bionic/ja/man8/iptables-extensions.8.html
下記が仮想マシンで試した作業をスクリプトにしたもの。
#! /bin/sh
##############
# wan側(NATして、外から見えるIPアドレスを持つNIC)
# lan側(NATされて、外から見えないIPアドレスを持つNIC)
##############
wan_eth='enp0s3'
lan_eth='enp0s8'
internal_net='192.168.56.0/24'
trusthost='192.168.0.20'
my_internal_ip='192.168.0.1'
echo 1 > /proc/sys/net/ipv4/ip_forward
##############
#Flush & Reset
##############
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -X
##############
#sshで作業するために先に設定。
##############
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -j ACCEPT
##############
#Deafult Rule
##############
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
/sbin/iptables -A FORWARD -i $lan_eth -o $wan_eth -s $internal_net -j ACCEPT
/sbin/iptables -A FORWARD -i $wan_eth -o $lan_eth -m state --state ESTABLISHED,RELATED -j ACCEPT
#########
#loopback
#########
/sbin/iptables -A INPUT -i lo -j ACCEPT
###############################
#ICMP trusthost->my_internal_ip
###############################
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -i $lan_eth -j ACCEPT
###############################
#ICMP my_internal_ip->trusthost
###############################
/sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -s $trusthost -d $my_internal_ip -j ACCEPT
###############################
#ssh trusthost-> my_internal_ip
###############################
#################
#SNAT(masquerade)
#################
/sbin/iptables -t nat -A POSTROUTING -o $wan_eth -s $internal_net -j MASQUERADE --random
#########
#logging
#########
/sbin/iptables -N LOGGING
/sbin/iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
/sbin/iptables -A LOGGING -j DROP
/sbin/iptables -A INPUT -j LOGGING
/sbin/iptables -A FORWARD -j LOGGING
課題
- 一般的なNATの判定手段が見つけられなかったです。
- iptablesで何をどこに設定しているのかがわかりづらいので、
下記のページを参考にして頭に入れながら作業するとわかりやすいです。
https://christina04.hatenablog.com/entry/iptables-outline - このLAN側にはDHCPサーバがないので、自分でIPアドレス、デフォルトゲートウェイ、DNSを設定しないと動きません。(DNSサーバも動かしていない場合、ブロードバンドルータ同様にルータのIPアドレスをDNSとして設定しても動きません。GoogleパブリックDNSの8.8.8.8など設定してください。)
結果
無事、SymmetricNATを作成することができました。
ただし、sshをWAN側から設定可能としていたり、WAN・LAN側の両方をプライベートIPで試した関係で、セキュリティを考慮していない設定となっているので、実際のルータ(WAN側がグローバルIP)としての運用はできないのでご注意ください。
まとめ
今回は、SymmetricNATの作成方法として、Linuxのiptablesで再現するための設定方法を試しました。
ただ、NATの種類など今後時間ができたら調べてみたいと思います。(←多分やらないやつw)
NATの判定手段や関連するRFCをメモだけしておきます。
https://tex2e.github.io/rfc-translater/html/rfc3489.html
https://tex2e.github.io/rfc-translater/html/rfc5389.html
https://tex2e.github.io/rfc-translater/html/rfc8489.html
コメント