LoginSignup
6
7

More than 5 years have passed since last update.

iptablesでround robin

Last updated at Posted at 2015-04-27

概要

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
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7