Tunneling ,mobile IP và virtual private networks

Một phần của tài liệu XÂY DỰNG THỬ NGHIỆM LINUX PC HOẠT ĐỘNG NHƯ MỘTADSL ROUTER (Trang 58 - 79)

1. Hệ điều hành Linux

2.2.12.Tunneling ,mobile IP và virtual private networks

Linux kernel cho phép sự đóng gói của các giao thức. Điều này có nghĩa là bạn có thể làm đường hầm IPX xuyên qua IP ,cho phép 1 kết nối của 2 mạng IPX đi xuyên qua 1 đường liên kết mà ở đó chỉ dùng mỗi giao thức IP .Nó cũng có thể thực thi đóng gói IP-IP ,thực sự cần thiết cho việc hỗ trợ mobile IP,multicast, và amateur radio

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router Chương 4 CÁC NG DNG TÍCH HP VÀO H THNG 1. Gii thiu các ng dng 1.1. Zebra

ƒ Zebra là 1 routing daemon.Nó có thể hỗ trợ rất nhiều giao thức định tuyến chẳng hạn như RIPv1,RIPv2,OSPF,BGP…

ƒ Zebra là chương trình hoàn toàn miễn phí và rất thông dụng trên môi trường Linux

ƒ Cấu hình và sử dụng rất đơn giản ( gần giống router thật )

1.2. Tính năng Dynamic DNS : noip-duc-linux.tar

1.2.1. Giới thiệu

ƒ www.no-ip.com là trang web cung cấp nhiều giải pháp về IP và tên miền. No-ip FREE là một trong số các dịch vụ được cung cấp miễn phí cho phép người dùng không có IP cố định được nhận biết trên môi trường Internet.

ƒ Dùng tính năng Dynamic DNS Update Client được cung cấp bởi dịch vụ DDNS Server từ trang web : www.no-ip.com

ƒ Từ trang web www.no-ip.com, tạo một Account để sử dụng dịch vụ. Sau đó cài gói Dynamic DNS Update Client lên máy tính

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Linux dùng làm Router ADSL, khai báo tài khoản cho chương trình và sử dụng.

ƒ Gói Dynamic DNS Update Client được download tại địa chỉ : www.no-ip.com/download

ƒ Qui trình xử lý

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

DNS tại www.no-ip.com với tên miền là www.routerlinux.no- ip.com

ƒ Tại thời điểm 1, Server B được dịch vụ cấp phát địa chỉ động của ISP cấp cho địa chỉ 203.162.57.111 và được ánh xạ đến tên miền đã đăng kí.

ƒ Tại thời điểm 2, Server B được cấp phát địa chỉ khác: 203.162.57.112 và được chương trình dynamic dns client thực hiện cập nhật tới Server của no-ip. Lúc này tên miền của Server B sẽ được ánh xạ tới địa chỉ mới

ƒ Client A sẽ truy vấn tên miền của Server B và được trả lại địa chỉ IP của Server B, từ đó kết nối tới Server B.

1.3. FAIR NAT

1.3.1 Giới thiệu

Đây là chương trình dành cho Linux Router.Nó cho phép thực hiện những việc tương tự như chia sẻ bandwidth ngang bằng giữa các client trong mạng nội bộ.

1.3.2 Kiến trúc Fair Nat

HTB class (for bandwidth sharing) |

\-- PRIO (for prioritizing interactive traffic) |

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

\--- Normal: SFQ \--- High-Traffic: SFQ

[ \--- P2P: SFQ (if IPP2P support is enabled only) ]

Để có thể hiểu rõ về FAIR NAT ,chúng ta cần nắm một số khái niệm sau :

1.3.1.1. Sơ lược v các loi hàng đợi không phân lp

ƒ FIFO,First-In First-Out(pfifo và bfifo) :Thuật toán của FIFO thể hiện nến tảng cho loại hàng đợi mặc định trong Linux (pfifo_fast) .FIFO không thực thi bất cứ sự điều chỉnh hay tái sắp xếp packet nào cả.Nó chỉ đơn giản truyền các packet ngay sau khi nhận và định hàng đợi cho packet. (adsbygoogle = window.adsbygoogle || []).push({});

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Hình 4.2 Chiến lược FIFO

Một quy tắc hàng đợi FIFO có một kích thước hữu hạn ( kích cỡ vùng đệm ) để ngăn ngừa sự quá tải trong trường hợp nó không thể giải phóng các packet ra khỏi hàng đợi nhanh như là nó nhận vào .Linux thực thi 2 lại fifo ,một hoạt động dựa trên byte ( bfifo )và một còn lại dựa trên packet ( pfifo ) .Dù vậy,các loại hàng đợi FIFO đều định nghĩa kích cỡ thông qua tham số limit .Trong đó,đơn vị của bfifo là byte còn đơn vị của pfifo là packet.

Example 6. Specifying a limit for a packet or byte FIFO

[root@leander]# cat bfifo.tcc

/*

* make a FIFO on eth0 with 10kbyte queue size * */ dev eth0 { egress { fifo (limit 10kB); } } [root@leander]#tcc < bfifo.tcc # ====================Device eth0 =============== tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

[root@leander]# cat pfifo.tcc

/*

* make a FIFO on eth0 with 30 packet queue size * */ dev eth0 { egress { fifo (limit 30p ); } } [root@leander]# tcc < pfifo.tcc # =====================Device eth0 ==================

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0

tc qdisc add dev eth0 handle 2:0 parent 1:0 pfifo limit 30

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Hình 4.3 Qui tắc hàng đợi Linux

ƒ Pfifo_fast là quy tắc hàng đợi mặc định cho tất cả các interfaces trong Linux .Dựa trên một quy ước của hàng đợi FIFO,quy tắc hàng đợi này đề xuất một vài sự ưu tiên .Nó cung cấp một vài dải băng tần khác nhau ( các FIFO riêng biệt ) để chia lưu lượng .Vì thế ,band 1 thì luôn được làm rỗng để chờ packet trước khi band 2 được giải phóng khỏi hàng đợi

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Hình 4.4 Chiến lược Round Robin

Example 7. Creating an SFQ

[root@leander]# cat sfq.tcc

/*

* make an SFQ on eth0 with a 10 second perturbation *

*/

dev eth0 { egress {

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router sfq( perturb 10s ); } } [root@leander]# tcc < sfq.tcc # ================== Device eth0 ===================

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0

tc qdisc add dev eth0 handle 2:0 parent 1:0 sfq perturb 10

ƒ Là 1 trong các thuật toán fair queue .SFQ không chính xác bằng các thuật toán khác .Nhưng nó có ưu điểm là cần ít sự tính toán trong khi vẫn hoạt động tốt

ƒ Cốt lõi của SFQ là việc chia các luồng TCP session hoặc UDP stream ra thành một số lớn các hàng đợi FIFO ( như chúng ta thấy trong hình trên ) ,1 cho mỗi luồng .Sau đó ,traffic được lưu thông theo cơ cấu round robin,tạo cơ hội cho mỗi session gửi dữ liệu mỗi khi đến lượt

ƒ Điều này rõ ien là rất công bằng ,đảm bảo rằng không có luồng nào bị ngắt .Nó hoàn toàn không phân phát cho mỗi session 1 hàng đợi nào cả .Thay vào đó, nó dùng 1 thuật toán để chia traffic vào trong một số các hàng đợi hữu hạn bằng cách sử dụng thuật toán băm (adsbygoogle = window.adsbygoogle || []).push({});

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

1.4. Perturb

Thời gian để tái cấu hình hashing.Nếu thông số này không được thiết lập thì bảng băm sẽ không được tái cấu hình.10s là giá trị tốt nhất

1.5. Quantum

Số lượng byte của một luồng (stream) được cho phép giải phóng khỏi hàng đợi trước khi đến lượt một hàng đợi khác.Mặc định là 1 ( bằng giá trị MTU ).Không được thiết lập nhỏ hơn MTU

ƒ Ví dụ cấu hình

# tc qdisc add dev ppp0 root sfq perturb 10 # tc −s −d qdisc ls

qdisc sfq 800c: dev ppp0 quantum 1514b limit 128p flows 128/1024 perturb 10sec

Sent 4812 bytes 62 pkts (dropped 0, overlimits 0)

800c: là một số handle được đăng kí tự động,limit 128 ở đây nghĩa là 128 packet có thể đợi trong hàng đợi này.

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Hình 4.5 Hàng đợi Token Bucket Filter

Đây là loại hàng đợi được xây dựng dựa trên các thẻ bài (token) và thùng chứa ( bucket ).Đơn giản, nó chỉ điều tiết lưu lượng được chuyển trong 1 interface.TBF là giải pháp rất tốt để giới hạn tốc độ các packet được đưa ra khỏi hàng đợi tại một interface cụ thể .Nó đơn giản là làm giảm lưu lượng chuyển tại một tốc độ xác định

Packet chỉ được chuyển đi nếu có đủ các thẻ bài có giá trị.Bằng không,nó sẽ bị hoãn lại.Sự làm trể packet theo cách này sẽ phát sinh một độ trễ giả vào trong vòng di chuyển của packet

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Example 9. Creating a 256kbit/s TBF

[root@leander]# cat tbf.tcc

/*

* make a 256kbit/s TBF on eth0 *

*/

dev eth0 {

egress {

tbf( rate 256 kbps, burst 20 kB, limit 20 kB, mtu 1514 B ); } } [root@leander]# tcc < tbf.tcc # ==================== Device eth0 =================

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0 tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps

1.5.1.1. Hàng đợi phân lp

ƒ Linux HTB( Hierrachical Token Bucket)

Đây là một cấu trúc hàng đợi mới trong linux .Ưu điểm của nó là có thể hạn chế được lưu lượng của các loại traffic .Thêm vào đó,nó còn có khả năng thiết lập các loại dữ liệu lưu thông bên dưới các loại khác tạo nên một loại lưu thông có cấu trúc

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

HTB sử dụng khái niệm về thẻ bài (token) và thùng chứa (bucket ) (adsbygoogle = window.adsbygoogle || []).push({});

1 phần cơ bản trong HTB qdisc ( classful queuing discipline – quy tắc hàng đợi phân lớp ) là kỹ thuật vay mượn .Vay mượn ở đây có nghĩa là lớp con sẽ mượn các thẻ bài từ lớp cha của chúng khi chúng có tốc độ vượt quá mức cho phép .Lớp con sẽ luôn cố gắng thử mượn các thẻ bài cho đến khi chúng đạt đến giới hạn tối đa .Lúc đó,nó sẽ bắt đầu tạo hàng đợi packet để chuyển đi cho đến khi nhiều thẻ bài có giá trị.Bởi vì ở đây chỉ có 2 lớp có thể được tạo với HTB .Bảng và sơ đồ sau sẽ xác định các trạng thái có thể có và cách hoạt động của kỹ thuật vay mượn

Lớp Trạng thái lớp

Trạng thái bên trong của HTB

Hành động phát sinh

Leaf < rate

HTB_CAN_SEND Các lớp lá sẽ giải phóng các byte nằm trong hàng đợi đến các thẻ bài có giá trị ( không nhiều hơn burst packet)

Leaf

>rate

<ceil HTB_MAY_BORROW

Lớp lá sẽ cố gắng mượn tokens/ctokens từ lớp cha .Nếu tokens tồn tại ,chúng sẽ được mượn lúc quantum tăng lên và lớp lá sẽ giải hàng đợi tùy theo số byte cburst

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

đợi .Điều này sẽ làm packet bị trễ và làm tăng độ trễ để đạt được tốc độ mong muốn

Inner, root

< rate HTB_CAN_SEND

Lớp inner sẽ mượn token cho lớp con

Inner, Root

>rate

<ceil

HTB_MAY_BORROW

Lớp inner sẽ cố gắng mượn tokens/ctokens từ lớp cha

Inner, Root

>ceil

HTB_CANT_SEND Lớp inner không mượn token từ lớp cha và cũng chẳng trả token/ctoken cho lớp con

Bảng 4.1 Các thông số của lớp HTB

Sơ đồ miêu tả quá trình mượn các thẻ bài và cách mà theo đó các thẻ bài được trao đổi với lớp cha .Để mô hình vay mượn hoạt động ,mỗi lớp phải có một số lượng cụ thể các thẻ bài được dùng cho bản thân nó và các lớp con của nó .

Bất kì lớp con nào muốn vay mượn thẻ bài sẽ gửi yêu cầu đến lớp cha của nó

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

Hình 4.6 Lớp HTB Các tham số trong lớp HTB

ƒ Default : Là tham số tùy chọn cho mỗi đối tượng HTB qdisc ( qdisc là những quy tắc hàng đơi ví dụ : FIFO là loại hàng đợi có quy tắc vào trước ,ra trước ).Mặc định của default là 0 (adsbygoogle = window.adsbygoogle || []).push({});

ƒ Rate : Dùng để thiết lập tốc độ tối thiểu để giới hạn lưu lượng trao đổi .Điều này tương đương với một tốc độ thông tin đã xác định ( CIR-committed information rate ) hoặc để đảm bảo băng thông cho một lớp lá (leaf) cho

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

trước.(tốc độ sàn ?)

ƒ Ceil : Được dùng để thiết lập tốc độ tối đa mà mình mong muốn để giới hạn lưu lượng trao đổi .Mô hình vay mượn sẽ mô tả làm thế nào để sử dụng tham số này.Có thể xem cái này giống với băng thông tối đa ( tốc độ trần ?)

ƒ Burst : Đây là kích cỡ của thùng chứa rate.HTB sẽ giải phóng một số lượng burst bytes trước khi chờ nhiều thẻ bài hơn đến

ƒ Cburst:Đây là kích cỡ của thùng chứa ceil . HTB sẽ giải phóng một số lượng cburst bytes trước khi chờ nhiều thẻ bài hơn đến

ƒ Quantum: đây là tham số chính được dùng bởi HTB để điều khiển sự vay mượn .Thường thì, quantum được tính toán bởi HTB ,chứ không phải được chỉ định bởi người dùng.Sự chỉnh sửa tham số này có thể sẽ dẫn đến những hậu quả ghê gớm làm mất cân bằng giữa sự vay mượn và sự điều chỉnh

ƒ R2q : được tính bởi user .Đây là một nhân tố giúp HTB xác định quantum tối ưu cho từng lớp cụ thể

ƒ Mtu ( maximum transfer unit ) :

ƒ PRIO ,priority scheduler

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

đây ,mỗi band là một lợp riêng biệt chứ không chỉ đơn thuần là một FIFO

Khi một packet được đưa vào trong hàng đợi PRIO,một lớp được chọn dựa vào câu lệnh filter mà bạn đã áp.Theo mặc định ,3 lớp được tạo ra.Lúc này ,chúng chỉ là những hàng đợi hoàn toàn FIFO và không có cấu trúc bên trong ,nhưng bạn có thể thay thế chúng bằng bất kì loại hàng đợi nào mà bạn có thể sử dụng được

Khi một packet cần được giải phóng khỏi hàng đợi, class:1 được ưu tiên trước.Các lớp cao hơn chỉ dùng nếu các band thấp hơn hoàn toàn không giải phóng packet

Loại hàng đợi này rất hữu dụng nếu như bạn muốn định mức độ ưu tiên cho từng loại traffic xác định mà không chỉ dùng cờ TOS mà dùng tất cả sức mạnh của tc filter.

ƒ Tham số và ý nghĩa các tham số 1.6. Bands

Số lượng các band được tạo ra .Mỗi band thật sự là một lớp 1.7. Priomap

Nếu bạn không cung cấp tc filter (không cấu hình ) để phân loại traffic thì PRIO sẽ dựa vào TC_PRIO priority để xác định làm thế nào để đưa traffic vào hàng đợi

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router Chúng ta tạo một cây root 1: prio / | \ 1:1 1:2 1:3 10: 20: 30: sfq tbf sfq band 0 1 2

Phần lớn traffic sẽ đi đến 30: , các traffic tương tác đến 20: hoặc 10: Các câu lệnh dùng để cấu hình

# tc qdisc add dev eth0 root handle 1: prio # This *instantly* creates classes 1:1, 1:2, 1:3 # tc qdisc add dev eth0 parent 1:1 handle 10: sfq

# tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000

# tc qdisc add dev eth0 parent 1:3 handle 30: sfq

Bây giờ ,kiểm tra xem các cấu hình của chúng ta vừa thiết lập ở trên bằng câu lệnh

# tc −s qdisc ls dev eth0

Và dưới đây là kết quả

qdisc sfq 30: quantum 1514b

Sent 0 bytes 0 pkts (dropped 0, overlimits 0) qdisc tbf 20: rate 20Kbit burst 1599b lat 667.6ms

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

qdisc sfq 10: quantum 1514b (adsbygoogle = window.adsbygoogle || []).push({});

Sent 132 bytes 2 pkts (dropped 0, overlimits 0)

qdisc prio 1: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0, overlimits 0)

Như chúng ta thấy ,band 0 có vài traffic và một packet đã được gửi

Bây giờ chúng ta thực thi một số lượng lớn dữ liệu chuyển đi với 1 công cụ thiết lập đúng các cờ TOS

# scp tc ahu@10.0.0.11:./ ahu@10.0.0.11's p’ssword:

tc 100% |*****************************| 353 KB 00:00 # tc −s qdisc ls dev eth0

qdisc sfq 30: quantum 1514b

Sent 384228 bytes 274 pkts (dropped 0, overlimits 0) qdisc tbf 20: rate 20Kbit burst 1599b lat 667.6ms Sent 2640 bytes 20 pkts (dropped 0, overlimits 0) qdisc sfq 10: quantum 1514b

Sent 2230 bytes 31 pkts (dropped 0, overlimits 0)

qdisc prio 1: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0, overlimits 0)

Xây dựng thử nghiệm PC Linux hoạt động như một ADSL Router

trong các band,đúng như dự định.Bây giờ ,để xác định các interactive traffic đi đến các band cao hơn, chúng ta tạo ra môt vài interactive traffic

# tc −s qdisc ls dev eth0 qdisc sfq 30: quantum 1514b

Sent 384228 bytes 274 pkts (dropped 0, overlimits 0) qdisc tbf 20: rate 20Kbit burst 1599b lat 667.6ms Sent 2640 bytes 20 pkts (dropped 0, overlimits 0) qdisc sfq 10: quantum 1514b

Sent 14926 bytes 193 pkts (dropped 0, overlimits 0)

qdisc prio 1: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0, overlimits 0)

Một phần của tài liệu XÂY DỰNG THỬ NGHIỆM LINUX PC HOẠT ĐỘNG NHƯ MỘTADSL ROUTER (Trang 58 - 79)