Chúng ta sẽ phải đánh dấu các kết nối MỚI bằng một điểm đánh dấu, sau đó phân biệt các gói đi trên cơ sở của điểm đánh dấu và sử dụng một trong hai bảng định tuyến để định tuyến chúng đến cổng thích hợp. Có thể bạn phải tải mô-đun CONNTRACK,
modprobe ip_conntrack
Chúng ta hãy gọi MAC70 là địa chỉ MAC của gateway 192.168.0,70 và MAC80 là địa chỉ MAC của 192.168.0.80. Sau đó
iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2
Hai quy tắc này đánh dấu các kết nối mới, kết nối (đối với giao thức TCP, sửa đổi nếu bạn cần) bằng hai điểm đánh dấu đơn giản. Điểm đánh dấu dành cho toàn bộ kết nối, I E. tất cả các gói sau thuộc loại THÀNH LẬP, LIÊN QUAN thuộc về gói ban đầu này sẽ có cùng dấu.
Việc phân biệt chỉ có thể được thực hiện trên cơ sở địa chỉ MAC của cổng, bởi vì địa chỉ IP nguồn của mỗi gói là của máy khách bắt đầu kết nối, không phải cái cổng đó. Do đó, điều này chỉ áp dụng cho các kết nối ethernet, vì các khung wifi không mang địa chỉ MAC.
Hiện nay
ip rule add fwmark 1 table router70
ip rule add fwmark 2 table router80
hai lệnh này xác định bảng định tuyến (của hai) sẽ sử dụng, tùy thuộc vào dấu kết nối / gói.
Bây giờ chúng tôi thiết lập hai bảng định tuyến:
echo 200 router70 >> /etc/iproute2/rt_tables
echo 201 router80 >> /etc/iproute2/rt_tables
ip route add 192.168.0.0/24 dev eth0 table router70
ip route add 192.168.0.0/24 dev eth0 table router80
ip route add default via 192.168.0.70 table router70
ip route add default via 192.168.0.80 table router80
Điều này giả định rằng ethernet ethernet của bạn được gọi là eth0, nếu không thì thay đổi tương ứng. Định tuyến cho tất cả các cổng và / hoặc giao thức khác vẫn là giao thức bạn đã có, bất kể đó là gì.
Bạn xong việc rồi.