Truyện ngắn,
3 giao diện, eth0 (LAN), eth1 (ADSL), eth2 (4G).
eth0 -> eth1: Hoạt động
(cổng 80, 443, 4070) eth0 -> eth2: Không xảy ra
Đây là một đại diện đồ họa của ý tưởng:
Cổng 80 & 443 qua eth2
ant phần còn lại qua 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
Kịch bản mới này định tuyến lại 22 và 4070 vào bảng thích hợp, tôi nghĩ vậy.
Tuy nhiên, sau khi đến bảng đó, nó không được định tuyến lại thành eth2.
Kịch bản này hoạt động, ngoại trừ 22 và 4070!
(Cổng 80 không được bình luận và nó hoạt động nhưng thông qua eth1 là sai.)
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
Kịch bản cũ:
Ignore everything below unless you're interested in retracing my steps!!
Tôi đã tạo một tập lệnh router.sh để thiết lập môi trường của mình trong trường hợp tôi làm điều gì đó xấu. Tôi đã có 3 cổng mà tôi muốn gửi đến kết nối 4G và phần còn lại thông qua kết nối ADSL cố định. Để thực hiện việc này, tôi đã hướng dẫn iptables cho các gói mangle trên tuyến mặc định và gửi chúng qua giao diện 4G của tôi nếu --dport == 443 | 80 | 4070
Tuy nhiên, điều này không hoạt động; Tôi vẫn đang được chuyển qua điện thoại cố định của mình bất kể điều gì.
Đây là những gì kịch bản của tôi trông giống như:
#!/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
Tôi cũng đã cố gắng thêm 3 phần này vào phần dưới của tập lệnh:
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"
Cũng đã thử mà không thành công:
iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1
Cuối cùng nhưng không kém phần quan trọng, đã thử:
## 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
Việc định tuyến hoạt động, tôi có thể duyệt web, nghe nhạc và không, nhưng tôi đang làm điều đó thông qua giao diện sai. Tôi đã loay hoay một lúc lâu và tìm thấy các mẩu và mảnh để hiểu những gì tôi đang làm và tại sao tôi lại làm điều đó. Tôi có thể định hình lưu lượng truy cập qua tc nhưng nếu có thể thông qua việc đánh dấu các gói trong iptables thì nó sẽ giúp tôi rất lâu.
Tôi đoán là tôi đang thực hiện sai thứ tự trên các quy tắc khác nhau, chủ yếu là phần MASQUERADE ? hoặc nếu điều đó thậm chí nên ở đó?
Ai đó có thể giải thích làm thế nào để cổng DNAT nói, tcp: 80 từ giao diện bên ngoài (một hoặc một giao thức BOTH) sang không gian địa chỉ 10.0.0.0 bên trong không?
Đầu ra:
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
Thực hiện theo các hướng dẫn sau:
đầu ra-lưu lượng truy cập trên các giao diện khác nhau dựa trên đích đến
iptables-chuyển tiếp-cụ thể-cổng-đến-cụ thể-nic
Trong số một số chủ đề liên quan khác.
ethX
địa chỉ IP của một địa chỉ sẽ ngăn các máy chủ trên mạng ethX
truy cập vào máy chủ cục bộ bằng ethY
địa chỉ IP của họ và sẽ không ngăn các máy chủ ethY
truy cập vào máy chủ bằng ethX
địa chỉ IP của máy chủ . Hãy nhớ rằng Linux sử dụng mô hình máy chủ yếu.
localhost
và địa chỉ củaeth2
giao diện không?