概要
tcp-serverを、3つ走らせ、それぞれ、port 12125,12225,12325をlistenさせる。
クライアントが、port25に投げてきたら、それぞれに分配する。
- mangle-PREROUTINGで、新しいconnectionについて、CONNMARKをつける
- nat-PREROUTINGでCONNMARKによってip/portを書き換える
- 反対方向のトラフィックについても、POSTROUTINGで、一応ip/portを元に戻しておく。
設定
echo 1 > /proc/sys/net/ipv4/ip_forward
smtp_ip='192.168.100.1'
smtp_port='25'
smtp_port1='12125'
smtp_port2='12225'
smtp_port3='12325'
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
iptables -t mangle -A PREROUTING -p tcp -d $smtp_ip --dport $smtp_port -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j CONNMARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -d $smtp_ip --dport $smtp_port -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -d $smtp_ip --dport $smtp_port -m state --state NEW -m statistic --mode nth --every 3 --packet 2 -j CONNMARK --set-mark 3
iptables -t nat -A PREROUTING -p tcp -d $smtp_ip --dport $smtp_port -m connmark --mark 1 -j DNAT --to-destination $smtp_ip:$smtp_port1
iptables -t nat -A PREROUTING -p tcp -d $smtp_ip --dport $smtp_port -m connmark --mark 2 -j DNAT --to-destination $smtp_ip:$smtp_port2
iptables -t nat -A PREROUTING -p tcp -d $smtp_ip --dport $smtp_port -m connmark --mark 3 -j DNAT --to-destination $smtp_ip:$smtp_port3
iptables -t nat -A POSTROUTING -p tcp -s $smtp_ip --sport $smtp_port1 -j SNAT --to-source $smtp_ip:$smtp_port
iptables -t nat -A POSTROUTING -p tcp -s $smtp_ip --sport $smtp_port2 -j SNAT --to-source $smtp_ip:$smtp_port
iptables -t nat -A POSTROUTING -p tcp -s $smtp_ip --sport $smtp_port3 -j SNAT --to-source $smtp_ip:$smtp_port