プライベートIPアドレスを使用し、ルータ(ゲートウェイ)で少なくとも2時間SNATエントリをアクティブにしようとします(私のネットワークの一部のWindowsアプリケーションは、2時間に設定されたTCPキープアライブを使用します)。ゲートウェイはLinuxマシンなので7400秒にnf_conntrack_tcp_timeout_established
設定しました。nf_conntrack_generic_timeout
echo 7400 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
echo 7400 > /proc/sys/net/netfilter/nf_conntrack_generic_timeout
これで、TCP接続が確立された直後に新しい値が表示されます。
# cat /proc/net/ip_conntrack
tcp 6 7399 ESTABLISHED src=192.168.0.192 dst=108.168.176.194
sport=51826 dport=5222 src=108.168.176.194 dst=95.63.14.117 sport=5222
dport=51826 [ASSURED] use=1
しかし、数秒後に値を読み直したところ、値は60秒に戻りました。
tcp 6 39 ESTABLISHED src=192.168.0.192 dst=108.168.176.194
sport=51826 dport=5222 src=108.168.176.194 dst=95.63.14.117 sport=5222
dport=51826 [ASSURED] use=1
答え1
根本的な原因は、カーネルのconntrackコードが修正されたためです。プロバイダが変更した組み込みLinuxディストリビューションを使用しているため、SNATエントリのタイムアウトを更新する機能は、プロバイダが提供する新しい「機能」の1つを提供する特別な機能を指します。私はそれを修正し、今期待通りに動作します。