Định tuyến là quá trình tìm được đi của một gói tin và forward. Định tuyến dựa vào địa chỉ IP đích + các yếu tố khác của gói tin như source, protocol, port, thậm chí cả payload được gọi là Policy Routing.
2. Traditional IPv4 Routing
Trường hợp đơn giản nhất. T-D
- Định tuyến là quá trình tìm đường đi của một gói tin và forward
- Định tuyến truyền thống dựa nào địa chỉ IP đích trong IP header để
chọn ra tuyến đường phù hợp.
=> Tất cả các traffic đến cùng 1 đích đều đi chung một đường.
3. Policy Routing Theory
TM
Bạn lái xe ra đường => gặp ngã ba => chỉ có rẽ trái hoặc rẽ phải.
Rẽ bên nào phụ thuộc vào việc bạn muốn đi đâu.
=> Định tuyến dựa trên đích đến
4. Policy Routing Theory
- Phức tạp hơn, khi bạn lái xe đến một ngã
6.
- Cả 6 hướng đều có thể đi đến đích mà
bạn mong muốn.
+ Gần, đẹp, tối đa 80km/h, cấm ô tô
+ Nhiều sỏi, chỉ cho xe lu
+ Đường xa chỉ dành cho xe đạp
+ Phố đi bộ
+ Đường dành riêng cho xe bus
=> Lúc này việc chọn đi đường nào phụ thuộc vào bạn muốn
đi đâu và thêm bạn đang đi bằng phương tiện gì.
=> Định tuyến dựa vào địa chỉ IP đích + các yếu tố khác
của gói tinnhư source, protocol, port, thậm chí cả payload
được gọi là Policy Routing
5. Có gì hay ?
● Source-Based Transit Provider Selection: nhóm user khác
nhau sẽ đi qua các ISP khác nhau.
● QoS: Phân loại traffic và dành độ ưu tiên khác nhau
● Cost Savings: phân loại traffic theo các tuyến high-bandwidth,
low-cost.
● Load Sharing: cân tải, giả sử đến cùng một đích sẽ load qua
nhiều line khác nhau, khác với định tuyến truyền thống.
● Performance Improvement: với các line có MTU khác nhau,
có thể chọn line có MTU hợp lý nhất để tránh phân mảnh.
6. Kiềng 3 chân - Address, Route, Rule
● Thành phần cốt lõi của định tuyến dựa
trên chính sách gồm có 3 yếu tố
- Address: đi đến đâu
- Route: đi đường nào
- Rule: đi bằng gì, đi từ đâu …
● Sự tương tác của 3 yếu tố tạo ra sự
linh hoạt và phức tạp trong định tuyến
Không liên quan
( Có thể bạn chưa biết hoặc Có thể bạn biết rồi)
"Có một và chỉ một mặt phẳng đi qua ba điểm không
thẳng hàng" => 3 chân vững hơn 4 chân, 5 chân ...
7. Rule
● Thành phần mới, có xét đến thứ tự
● Một dạng như flow control < if … then … >, một phương
pháp để thực hiện ACL (Access Control List).
● Rule cho phép thực hiện filter, match một số điều kiện xác
định, rồi xác định route nào được sử dụng khi điều kiện
thỏa mãn.
● Thường dùng: route dựa vào source address
● rule types : prohibit, nat, unreachable, blackhole, unicast
8. Multiple Routing Tables
● Bạn có 3 đường đến FILESERVER : slow_link, medium_link, fast_link
● Nhóm HCNS chỉ tải các file dung lượng thấp (word, excel) => có thể
dùng slow_link
● Nhóm VCCLOUD tải các file image (iso) => cần fast_link
● Nếu chỉ có 1 bảng định tuyến, bạn chỉ có thể có 1 route đến
FILESERVER. Bạn chọn slow_link hay fast_link.
=> Sử dụng multipe routing table. Bảng A chứa slow_link, bảng B
chưa fast_link, kết hợp rule
● ip rule add from HCNS to FILESERVER table A
● ip rule add from VCCLOUD to FILESERVER table B
10. - Thêm bảng định tuyến
echo “200 hcns” >> /etc/iproute2/rt_tables
- Thêm route vào bảng định tuyến
ip route add $dest via $nexthop dev $interface table hcns
VD: ip route add 8.8.8.8 via 192.168.234.1 dev eth0 table hcns
- Thêm forwarding policies
ip rule add from HCNS table hcns pref 100
11. ip rule (simplified) usage
● ip rule add - insert a new rule ip rule
● ip rule delete - delete a rule
from PREFIX: select the source prefix to match.
to PREFIX: select the destination prefix to match.
Iif NAME: select the incoming device to match.
Oif NAME: select the outgoing device to match.
Tos TOS: select the TOS value to match.
Fwmark MARK: select the fwmark value to match.
priority PREFERENCE the priority of this rule.
Table TABLEID: the routing table identifier to lookup if the rule
selector matches.
● ip rule flush - also dumps all the deleted rules
● ip rule show - list rules
12. ● Khi gói tin đến router, kernel sẽ tìm route phù hợp dựa trên các rule
trong hệ thống. Bắt đầu từ highest priority , rule có prefer là 0.
● Nếu không tìm thấy route trong rule này, sẽ tiếp tục tìm trong các
rule khác match với gói tin đó cho đến hết.
● Priority: 0, Selector: match anything, routes for local and broadcast
addresses. Rule 0 is special. It cannot be deleted or overridden.
● Priority: 32766, Selector: match anything, Action: lookup routing
table main (ID 254). The main table is the normal routing table
containing all non-policy routes. This rule may be deleted and/or
overridden with other ones by the administrator.
● Priority: 32767, Selector: match anything, Action: lookup routing
table default(ID 253). The default table is empty. It is reserved
for some post-processing if no previous default rules selected the
packet. This rule may also be deleted
13. PBR simple set-up
● Specification
* Traffic from LAN A => link_slow
* Traffic from LAN B => link_fast
* Traffic from LAN A, host 10.0.0.101 => link_fast
● Suggested workflow
* Define how many tables we need
* Add and configure any extra routing table
* Set the policies pointing to any extra table
(attention to the rule priorities!!!)
14. PBR complex set-up
Specification (with this priority order.
i.e.: the first matching rule wins!)
● DNS traffic => link slow
● SSH traffic => link fast
● TCP traffic with dports 40000:40100 => link_medium
● Traffic from host 10.0.0.101 => link_medium
● WEB traffic => link medium
● Traffic from LAN SOHAGAME => link_slow
● Traffic from LAN ADMICRO => link_medium
15. Solution
#set ENV variables!
SLOW=“-j mark --set-mark 1”
MEDIUM=“-j mark --set-mark 2”
FAST=“-j mark --set-mark 3”
#set the netfilter rules
iptables -A PREROUTING -m mark --mark 0 -p udp --dport 53$SLOW
iptables -A PREROUTING -m mark --mark 0 -p tcp --dport 22$FAST
iptables -A PREROUTING -m mark --mark 0 -p tcp -m multiport --dports40000:40100
$MEDIUM
iptables -A PREROUTING -m mark --mark 0 -s 10.0.0.101$MEDIUM
iptables -A PREROUTING -m mark --mark 0 -p tcp -m multiport --dports 80,433
$MEDIUM
#the last two policies (from LAN SOHA and LAN ADMICRO)
ip rule add pri 23000 from 10.0.0.0/24 table link_slow
ip rule add pri 23001 from 10.1.0.0/24 table link_medium
16. Solution
# create the extra tables
echo "200 link_slow" >> /etc/iproute2/rt_tables
echo "201 link_medium" >> /etc/iproute2/rt_tables
# add the default routes to the new tables
ip route add default via 1.0.0.2 table link_slow
ip route add default via 3.0.0.2 table link_medium
# add the routing policies.
ip rule add pri 20000 fwmark 1 table link_slow
ip rule add pri 21000 fwmark 2 table link_medium
ip rule add pri 22000 fwmark 3 table main