iptables 를 이용하여 3대의 웹서버가 로드밸런싱이 되도록 구축해 보자.
다음 네트워크 구성을 예시로 한다.
웹클라이언트가 접근할 수 있는 공용망 IP 를 210.0.0.200 으로 가정하고
그 하위에 NAT 로 구성된 서버 10.0.0.2 ~ 4 인 3대의 웹서버로 로드밸런싱을 구성하는 예.
10.0.0.2 ~ 4 의 서버들은 게이트웨이가 10.0.0.1 로 설정되어야 하며 CentOS 에서는 10.0.0.0/24 의 네트워크가 외부 네트워크로 인터넷이 되도록 NAT 설정이 되어야 한다.
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
리눅스 자체에 패킷포워딩이 설정되어야 하므로 다음과 같이 설정한다.
# echo "1" > /proc/sys/net/ipv4/ip_forward
예를 들어 80 포트로 인입되는 패킷을 10.0.0.2 – 4 까지의 80 포트로 부하 분산을 할 경우 다음과 같은 2가지 방법으로 구현할 수 있다.
패킷이 오는 순서대로 분산
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.2:80 # iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 10.0.0.3:80 # iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 2 -j DNAT --to-destination 10.0.0.4:80
패킷을 임의로 분산 (단 가중치를 두어 어느정도 분산율을 조정)
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m statistic --mode random --probability .33 -j DNAT --to-destination 10.0.0.2:80 # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m statistic --mode random --probability .33 -j DNAT --to-destination 10.0.0.3:80 # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m statistic --mode random --probability .33 -j DNAT --to-destination 10.0.0.4:80