ที่ให้ไว้: คอมพิวเตอร์ที่ขับเคลื่อนด้วย CentOS 8 พร้อมอะแดปเตอร์เครือข่ายสามตัว
eth0, eth2: ภายนอก เชื่อมต่อกับ ISP ที่แตกต่างกันสองราย
eth1: เผชิญกับเครือข่ายในบ้าน (อินทราเน็ต)
งาน: อนุญาตให้เข้าถึงบริการภายในบางอย่างจาก ISP ทั้งสองมีบริการหลายอย่าง ฉันพูดถึง SSH ด้านล่างเท่านั้น
ในการกำหนดค่าด้านล่าง:
IP1: IP ภายนอกที่ ISP แรก (ISP1) กำหนดให้กับ eth0
Gateway1: IP ของเกตเวย์ที่ให้บริการโดย ISP1
Network1,Netmask1: เกี่ยวข้องกับ IP1
IP2: IP ภายนอกที่ ISP ที่สอง (ISP2) กำหนดให้กับ eth2
Gateway2: IP ของเกตเวย์ที่ให้บริการโดย ISP2
Network2,Netmask2: เกี่ยวข้องกับ IP2
LocalSSHIP: IP ในอินทราเน็ต (eth1) ที่เซิร์ฟเวอร์ SSH กำลังทำงานอยู่
การกำหนดค่าปัจจุบันตามมา ตารางเส้นทาง:
echo "200 isp1" >> /etc/iproute2/rt_tables
echo "201 isp2" >> /etc/iproute2/rt_tables
นโยบายการกำหนดเส้นทาง:
/etc/sysconfig/network-scripts/route-eth0
Network1 dev eth0 src IP1 ตาราง isp1
ค่าเริ่มต้นผ่าน Gateway1 dev eth0 ตาราง isp1
/etc/sysconfig/network-scripts/route-eth2
Network2 dev eth2 src IP2 ตาราง isp2
ค่าเริ่มต้นผ่าน Gateway2 dev eth2 ตาราง isp2
กฎการกำหนดเส้นทาง:
/etc/sysconfig/network-scripts/rule-eth0
จากตาราง IP1/32 isp1
/etc/sysconfig/network-scripts/rule-eth2
จากตาราง IP2/32 isp2
ตัวอย่าง iptables การรับส่งข้อมูลภายนอกส่งต่อไปยังเซิร์ฟเวอร์ SSH ภายในจากทั้งสองอินเทอร์เฟซ:
iptables -A PREROUTING -t nat -i eth0 -p tcp -d IP1 --dport 22 -j DNAT --to LocalSSHIP:22
iptables -A PREROUTING -t nat -i eth2 -p tcp -d IP2 --dport 22 -j DNAT --to LocalSSHIP:22
iptables -A FORWARD -p tcp -d LocalSSHIP --dport 22 -j ยอมรับ
eth0 เป็นเกตเวย์เริ่มต้น:
เส้นทาง $ ip
ค่าเริ่มต้นผ่าน Gateway1 dev eth0 proto static metric 100
ค่าเริ่มต้นผ่าน Gateway2 dev eth2 proto static metric 101
...
กฎ $ ip
0: จากการค้นหาทั้งหมดในท้องถิ่น
32764: จากการค้นหา IP2 isp2
32765: จากการค้นหา IP1 isp1
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
SNAT ใช้สำหรับทราฟฟิกที่มาจาก eth1:
iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j SNAT --to-source IP1
สถานการณ์ปัจจุบัน:
- บริการทั้งหมดที่ส่งต่อจาก eth0 ทำงานได้ตามปกติ
- การรับส่งข้อมูลทั้งหมดที่มาจากอินทราเน็ตจะผ่านไปและกลับตามปกติ
- ความพยายามทั้งหมดในการเข้าถึงบริการจาก eth2 หมดเวลา
ไม่มีคำแนะนำที่ชัดเจนใน /var/log/messages (เช่น การร้องเรียนเกี่ยวกับ "martian IPs")
ฉันค่อนข้างสูญเสียที่นี่ คำแนะนำทั้งหมดยินดีเป็นอย่างยิ่ง