Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> สมาร์ทโฟน >> Linux

วิธี Redirect Traffic ไปยัง IP อื่นใน Linux ด้วย iptables

คู่มือนี้แนะนำวิธีใช้ iptables NAT Redirect traffic จากเซิร์ฟเวอร์เก่าไปเซิร์ฟเวอร์ใหม่ ระหว่างย้ายเว็บไซต์ (Migration) รอ DNS Propagate

สถานการณ์

  • เว็บไซต์ย้ายไปเซิร์ฟเวอร์ใหม่ IP: 122.164.34.240
  • DNS ยังชี้ไปเซิร์ฟเวอร์เก่า (รอ Propagation)
  • ต้องการ Forward traffic Port 80 จากเซิร์ฟเวอร์เก่า → ใหม่

ขั้นตอน 1: เปิด IP Forwarding

# echo 1 > /proc/sys/net/ipv4/ip_forward
# หรือถาวร: เพิ่มใน /etc/sysctl.conf
net.ipv4.ip_forward = 1
# ใช้งานทันที: sysctl -p

ขั้นตอน 2: DNAT (Destination NAT) - Redirect Incoming

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240
  • -t nat - ใช้ NAT table
  • PREROUTING - ก่อน Routing decision
  • --dport 80 - Port 80 (HTTP)
  • DNAT - เปลี่ยน Destination IP

ขั้นตอน 3: SNAT/MASQUERADE - Rewrite Source IP

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE
  • POSTROUTING - หลัง Routing decision
  • MASQUERADE - ซ่อน Source IP กลายเป็น IP ของเซิร์ฟเวอร์เก่า
  • สำคัญ: ไม่ทำขั้นตอนนี้ เซิร์ฟเวอร์ใหม่จะเห็น Request มาจาก IP เซิร์ฟเวอร์เก่า (ไม่ใช่ Client จริง) → Log ผิด, GeoIP ผิด, Rate limit ผิด

บันทึกกฎอย่างถาวร

# Ubuntu/Debian
apt install iptables-persistent
netfilter-persistent save

# CentOS/RHEL/Fedora
service iptables save
# หรือ
iptables-save > /etc/sysconfig/iptables

ล้างกฎ (Rollback)

# iptables -t nat -F
# iptables -F

ขยาย: Redirect หลาย Port

# HTTP + HTTPS
for port in 80 443; do
  iptables -t nat -A PREROUTING -p tcp --dport $port -j DNAT --to-destination 122.164.34.240
  iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport $port -j MASQUERADE
done

เทคนิคนี้ช่วยให้ Migration ไปได้ราบรื่น ไม่มี Downtime ระหว่างรอ DNS