เรื่องสั้น
3 อินเตอร์เฟส, eth0 (LAN), eth1 (ADSL), eth2 (4G)
eth0 -> eth1: ทำงาน
(พอร์ต 80, 443, 4070) eth0 -> eth2: ไม่เกิดขึ้น
นี่คือการแสดงกราฟิกของความคิด:
พอร์ต 80 และ 443 ผ่าน eth2
ant ส่วนที่เหลือผ่าน eth1
Netscheme:
eth0: -ip 10.0.0.1 -net 10.0.0.0/8 -gw 10.0.0.1 (the servers own intf)
eth1: -ip 192.168.1.74 -net 192.168.1.0/24 -gw 192.168.1.254
eth2: -ip 192.168.1.91 -net 192.168.0.0/24 -gw 192.168.0.1
สคริปต์ใหม่นี้เปลี่ยนเส้นทาง 22 และ 4070 ไปยังตารางที่เหมาะสมฉันคิดว่า
อย่างไรก็ตามหลังจากไปที่ตารางนั้นจะไม่ได้รับการเปลี่ยนเส้นทางเป็น eth2
สคริปต์นี้ใช้งานได้ยกเว้น 22 และ 4070!
(พอร์ต 80 ยกเลิกการใส่ความคิดเห็นและใช้งานได้ แต่ผ่าน eth1 ซึ่งผิด)
modprobe iptable_nat
modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -F PREROUTING
iptables -t nat -F
iptables -t mangle -F
iptables -F
# This next line restores any issues trying to connect to something
# if you get weird ACK packets when trying to connect (at least i did)!
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
ip route flush table main
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 22 -j MARK --set-mark 1
### iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 4070 -j MARK --set-mark 1
## Setup routes
# LAN
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0
# ADSL
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
# 4G (Only accessible if marking packages with \x01
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth2
# Default via ADSL
## -- Does the same as ip route below? route add default gw 192.168.1.254
echo "201 eth2.out" >> /etc/iproute2/rt_tables
ip rule add fwmark 1 table eth2.out
ip route add default via 192.168.0.1 dev eth2 table eth2.out
ip route add default via 192.168.1.254 dev eth1
## Setup forwards
# From 4G to LAN
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From ADSL to LAN
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From LAN to ADSL (Default route out)
# - Note: If marked packages is sent to ADSL they will be mangled and rerouted to 4G
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
สคริปต์เก่า:
Ignore everything below unless you're interested in retracing my steps!!
ฉันสร้างสคริปต์ router.sh เพื่อตั้งค่าสภาพแวดล้อมของฉันในกรณีที่ฉันทำสิ่งที่ไม่ดี ฉันมี 3 พอร์ตที่ฉันต้องการส่งไปยังการเชื่อมต่อ 4G และส่วนที่เหลือผ่านการเชื่อมต่อ ADSL พื้นฐาน ในการทำเช่นนี้ฉันได้สั่ง iptables ให้ทำการแพกเกจแพ็กเกจบนเส้นทางเริ่มต้นและส่งผ่านอินเทอร์เฟซ 4G ของฉันถ้า --dport == 443 | 80 | 4070
อย่างไรก็ตามสิ่งนี้ไม่ได้ผล ฉันยังคงถูกส่งผ่านโทรศัพท์พื้นฐานของฉันไม่ว่าจะเกิดอะไรขึ้น
นี่คือลักษณะของสคริปต์ของฉัน:
#!/bin/bash
## routing tables
# wireless = 4G via eth2
# adsl = adsl via eth1
modprobe iptable_nat
modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
ip route flush table main
ip route flush table wireless
ip route flush table adsl
## Setup routing tables
# ADSL
ip route add table adsl to 192.168.1.0/24 dev eth1
# 4G
ip route add table wireless to 192.168.0.0 dev eth2
ip rule add fwmark 0x1 table wireless
## Setup routes
# LAN
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0
# ADSL
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
# 4G (Only accessible if marking packages with \x01
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth2
# Default via ADSL
route add default gw 192.168.1.254
## Forward ports into the LAN
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 10.0.0.3:80
## Lets mark all packets we want for 4G forward
# HTTPS
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# HTTP
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 80 -j MARK --set-mark 1
# Spotify
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 4070 -j MARK --set-mark 1
## Setup forwards
# From 4G to LAN
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From ADSL to LAN
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# From LAN to ADSL (Default route out)
# - Note: If marked packages is sent to ADSL they will be mangled and rerouted to 4G
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -j LOG
#iptables --table nat --append POSTROUTING --out-interface eth2 --jump SNAT --to-source "192.168.1.74"
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
ฉันยังพยายามเพิ่ม 3 เหล่านี้ไปยังด้านล่างของสคริปต์:
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 80 -j SNAT --to "192.168.0.91"
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 443 -j SNAT --to "192.168.0.91"
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 4070 -j SNAT --to "192.168.0.91"
ยังพยายามไม่สำเร็จ:
iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1
สุดท้าย แต่ไม่ท้ายสุดพยายาม:
## Lets mark all packets we want for 4G forward
# HTTPS
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# HTTP
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 80 -j MARK --set-mark 1
# Spotify
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 4070 -j MARK --set-mark 1
การกำหนดเส้นทางใช้งานได้ฉันสามารถท่องเว็บฟังเพลงและอะไรก็ได้ แต่ฉันทำผ่านอินเตอร์เฟสที่ผิด ฉันไปเที่ยวมานานแล้วและพบว่าชิ้นส่วนและชิ้นส่วนที่จะเข้าใจสิ่งที่ฉันทำและทำไมฉันทำมัน ฉันสามารถสร้างปริมาณข้อมูลผ่าน tc ได้ แต่ถ้าเป็นไปได้ด้วยการทำเครื่องหมายแพ็คเกจใน iptables มันจะช่วยฉันได้นาน
ฉันเดาว่าฉันกำลังทำผิดกับกฎที่แตกต่างกันส่วนใหญ่เป็นส่วนMASQUERADE ? หรือว่าควรจะมี?
ใครสามารถอธิบายวิธีการDNATพอร์ตพูด tcp: 80 จากอินเทอร์เฟซภายนอก (โพรโทคอลหนึ่งหรือทั้งสอง) ไปยังพื้นที่ที่อยู่ 10.0.0.0 ภายในหรือไม่
ขาออก:
root@Netbridge:~# route -n Kernel IP routing table Destination
Gateway Genmask Flags Metric Ref Use Iface<br>
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth1<br>
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0<br>
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2<br>
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
root@Netbridge:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:7e:9e:4e
inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
eth1 Link encap:Ethernet HWaddr 00:0c:29:7e:9e:58
inet addr:192.168.1.74 Bcast:192.168.1.255 Mask:255.255.255.0
eth2 Link encap:Ethernet HWaddr 00:0c:29:7e:9e:62
inet addr:192.168.0.91 Bcast:192.168.0.255 Mask:255.255.255.0
ทำตามคำแนะนำเหล่านี้:
เอาท์พุทปริมาณการใช้งานบนที่แตกต่างกันอินเทอร์เฟซบนปลายทางปลายทาง por
iptables ไปข้างหน้าเฉพาะพอร์ตไปยังเฉพาะนิก
ในบรรดาหัวข้ออื่น ๆ ที่เกี่ยวข้อง
ethX
IP ของจะป้องกันโฮสต์บนethX
LAN เพื่อเข้าถึงเซิร์ฟเวอร์ท้องถิ่นโดยใช้ethY
ที่อยู่ IP ของและจะไม่ป้องกันโฮสต์จากการethY
เข้าถึงเซิร์ฟเวอร์โดยใช้ethX
ที่อยู่ IP ของ โปรดจำไว้ว่า Linux ใช้โมเดลโฮสต์ที่อ่อนแอ
localhost
และที่อยู่ของeth2
อินเทอร์เฟซเท่านั้นหรือไม่