Internet / WAN
│
eth0: DHCP
192.168.1.50
│
┌───────────────┐
│ Linux Router │
│ │
│ IP Forwarding │
│ NAT │
└───────────────┘
│
eth1: LAN
10.10.10.1
│
┌─────────┴─────────┐
│ │
Client 1 Client 2
10.10.10.10 10.10.10.20
GW: 10.10.10.1 GW: 10.10.10.1
1. تنظیم IP کارتهای شبکه
فرض کنیم:
ip addr add 192.168.1.50/24 dev eth0
ip addr add 10.10.10.1/24 dev eth1
ip link set eth0 up
ip link set eth1 up
روی سیستمهای LAN باید Gateway برابر با IP کارت LAN روتر باشه:
Gateway = 10.10.10.1
و DNS هم مثلاً DNS شبکه یا DNS عمومی تنظیم میشه.
2. فعال کردن IP Forwarding
بهصورت موقت:
sysctl -w net.ipv4.ip_forward=1
بررسی:
cat /proc/sys/net/ipv4/ip_forward
اگر خروجی:
1
باشه، Linux اجازه میده Packetها رو بین Interfaceها Forward کنه.
برای دائمی کردن:
nano /etc/sysctl.conf
این خط رو قرار بده:
net.ipv4.ip_forward=1
بعد:
sysctl -p
3. اضافه کردن Default Route
اگر Gateway اینترنت مثلاً
192.168.1.1
باشه:
ip route add default via 192.168.1.1 dev eth0
بررسی:
ip route
باید چیزی شبیه این ببینی:
default via 192.168.1.1 dev eth0
10.10.10.0/24 dev eth1
192.168.1.0/24 dev eth0
4. NAT با iptables
حالا باید آدرسهای خصوصی LAN هنگام خروج از Linux Router به WAN، NAT بشن.
سادهترین حالت:
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
یعنی:
هر ترافیکی از شبکهبرای اجازه دادن به Forward:10.10.10.0/24
که ازeth0
خارج شد، Source IP آن با IP کارت WAN روتر NAT شود.
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
و برای برگشت ترافیک:
iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
حالا مسیر کلی میشه:
Client
10.10.10.10
│
▼
Linux Router
10.10.10.1
│
│ SNAT/MASQUERADE
▼
192.168.1.50
│
▼
Internet
5. NAT دقیقاً چه اتفاقی میاندازه؟
فرض کن Client این Packet رو میفرسته:
SRC: 10.10.10.10:51520
DST: 8.8.8.8:443
Linux Router هنگام خروج Packet:
SRC: 192.168.1.50:51520
DST: 8.8.8.8:443
یعنی آدرس خصوصی Client از دید Internet دیده نمیشه.
وقتی جواب برمیگرده، Connection Tracking لینوکس میفهمه این Response متعلق به کدوم Connection داخلیه و Packet رو دوباره به:
10.10.10.10:51520
برمیگردونه.
6. همین سناریو با nftables
در سیستمهای Linux جدید،
nftables
گزینه مدرنتری نسبت به iptables محسوب میشه.
اول:
nft add table ip nat
Chain مربوط به POSTROUTING:
nft 'add chain ip nat postrouting { type nat hook postrouting priority 100; }'قانون NAT:
nft add rule ip nat postrouting oifname "eth0" ip saddr 10.10.10.0/24 masquerade
برای Forward هم میشه یک Table و Chain جدا ساخت:
nft add table inet filter
nft 'add chain inet filter forward { type filter hook forward priority 0; policy drop; }'اجازه LAN → WAN:
nft add rule inet filter forward iifname "eth1" oifname "eth0" accept
اجازه ترافیک برگشتی:
nft add rule inet filter forward iifname "eth0" oifname "eth1" ct state established,related accept
مشاهده قوانین:
nft list ruleset
نکته مهم
IP Forwarding و NAT دو چیز متفاوتن.
IP Forwarding
میگه:
Linux اجازه داره Packet رو از یک Interface بگیره و از Interface دیگه Forward کنه.
ولی
NAT
میگه:
هنگام عبور Packet، آدرسهای IP/Port رو طبق Rule تغییر بده.پس مسیر منطقی اینه:
LAN
│
▼
IP Forwarding
│
▼
Firewall / FORWARD
│
▼
NAT / POSTROUTING
│
▼
WAN
│
▼
Internet
@ITSecurityComputer


