আসসালামু আলাইকুম। আশাকরি মহান আল্লাহতায়ালার অশেষ রহমতে আপনারা সবাই ভালো আছেন। অনেক দিন পর আবার একটি টিউটোরিয়াল লেখার চেষ্টা করছি। আশাকরি অনেকেরই কাজে লাগবে। আমাদের আজকের টিউটোরিয়ালের বিষয়বস্তু হলো L2TPv3 Tunnel । L2TPv3 হলো একটি টানেলিং প্রটোকল, যার মাধ্যমে VPN ট্রাফিক আদান-প্রদান করা হয়। এর আগে আমি GRE Tunnel এর উপর একটি টিউটোরিয়াল লিখেছিলাম। আপনারা চাইলে সেই টিউটোরিয়ালটি দেখে নিতে পারেন www.mn-lab.net/security-gre.php ।
GRE Tunnel এর সাথে L2TPv3 এর বেসিক পার্থক্য হলো, GRE Tunnel হলো Layer-3 টানেল আর অন্যদিকে L2TPv3 হলো Layer-2 টানেল। একটু লক্ষ্য করলে দেখতে পাবো যে, আমরা যখন GRE Tunnel কনফিগার করি তখন আমাদের দুইটি অফিস লোকেশনের LAN আই.পি ব্লক দুইটি আলাদা সাবনেট এর হয়ে থাকে। আমরা শুধু GRE Tunnel এর মধ্য দিয়ে ঐ দুইটি আলাদা সাবনেটকে রাউটিং করে থাকি। কিন্তু কিছু কিছু ক্ষেত্রে আমাদের দুইটি অফিস লোকেশনের LAN আই.পি ব্লক একই সাবনেট এর হতে পারে। উদাহরণস্বরূপ, ঢাকা অফিসের একটি কম্পিউটারের আই.পি 192.168.10.10 আবার চট্টগ্রাম অফিসের একটি কম্পিউটারের আই.পি 192.168.10.20 । যদি উভয় পাশের আই.পি ব্লক একই সাবনেট এর হয় সেক্ষেত্রে একই আই.পি সাবনেটের দুইটি কম্পিউটারের মধ্যে কমিউনিকেশনের জন্য ARP সহ আরো কিছু Layer-2 প্রটোকল ব্যবহৃত হয়, যা কোন Layer-3 টানেলিং প্রটোকল যেমনঃ GRE Tunnel এর মধ্য দিয়ে পাস হয় না। এজন্য আমাদেরকে অবশ্যই কোন একটি Layer-2 টানেলিং প্রটোকল ব্যবহার করতে হয়।
Ethernet নিয়ে কাজ করার জন্য Layer-2 টানেলিং প্রটোকল হিসেবে EoIP বহুল ব্যবহৃত একটি প্রটোকল, কিন্তু যেহেতু এটি MikroTik এর নিজস্ব প্রটোকল তাই Cisco ডিভাইসে ইহা কনফিগার করা যায় না। এক্ষেত্রে L2TPv3 একটি ভাল সমাধান। L2TPv3 এর পূর্ণরূপ হলো Layer 2 Tunnel Protocol Version 3 । ইহা একটি বিশেষ ধরণের টানেলিং প্রটোকল যার মাধ্যমে AToM বা EoMPLS এর সাহায্য ছাড়াই বিভিন্ন Layer-2 Payload পাস করা যায়। যেমনঃ Ethernet, Frame Relay, 802.1q(VLAN), 802.1QinQ, HDLC, PPP, ATM ইত্যাদি। L2TPv3 এর পূর্ববর্তী ভার্সন L2TPv2 শুধুমাত্র PPP নিয়ে কাজ করতে পারে।
দুইটি রাউটারের মধ্যে L2TPv3 টানেল কনফিগার করার জন্য রাউটারদ্বয়ের মধ্যে Pseudowire (সুডোওয়্যার) কনফিগার করতে হয়। Pseudowire হলো এক ধরণের ভার্চুয়াল সার্কিট যার মধ্য দিয়ে Layer-2 VPN ট্রাফিক চলাচল করে। আর রাউটারদ্বয়কে বলা হয় L2TP Control Connection Endpoint (LCCE) ।
এই VPN ট্রাফিক দুই ধরণের হয়ে থাকে। ১. Control Connection Message এবং ২. Data Channel Message ।
রাউটারদ্বয় অর্থাৎ LCCE দ্বয়ের মধ্যে Pseudowire Signaling এর জন্য Control Connection Message ব্যবহৃত হয়। এর মাধ্যমে দুইটি রাউটার বা Endpoint এর মধ্যে L2TPv3 টানেল তৈরী হয়। তিনটি পদ্ধতিতে এই টানেল তৈরী হতে পারে। ১. Manual, ২. Manual with Keepalive এবং ৩. Dynamic । এছাড়াও Control Connection Message এর মাধ্যমে Authentication সহ আরো কিছু প্যারামিটার কনফিগার করা যায়। অপরদিকে, Data Channel Message এর মাধ্যমে দুইটি রাউটার বা Endpoint এর মধ্যে মূল Layer-2 Payload আদান-প্রদান হয়।
এই টিউটোরিয়ালে আমরা দেখবো Cisco রাউটারসমূহে কিভাবে Dynamic L2TPv3 কনফিগার করতে হয়। তো শুরু করা যাক…
চিত্রে R1, R2 এবং R3 হলো আই.এস.পি নেটওয়ার্কের তিনটি রাউটার। আই.এস.পি নেটওয়ার্কে থাকা রাউটারসমূহের মধ্যে ডায়নামিক রাউটিং প্রটোকল কনফিগার করা থাকে। এর ফলে আই.এস.পি নেটওয়ার্কে থাকা একটি রাউটার আরেকটি রাউটারকে চিনতে পারে। চিত্রে প্রদত্ত টপোলজি অনুযায়ী, আই.এস.পি রাউটারসমূহের মধ্যে OSPF কনফিগার করা হয়েছে। R1 এর সাথে XYZ কোম্পানীর ঢাকা অফিস যুক্ত (XYZ-DHK রাউটার) যার পয়েন্ট-টু-পয়েন্ট আই.পি ব্লক 172.16.0.0/30 এবং R3 এর সাথে XYZ কোম্পানীর চট্টগ্রাম অফিস যুক্ত (XYZ-CTG রাউটার) যার পয়েন্ট-টু-পয়েন্ট আই.পি ব্লক 172.16.3.0/30 ।
R1#conf t R1(config)#interface fastEthernet 0/0 R1(config-if)#ip address 172.16.1.1 255.255.255.252 R1(config-if)#no shutdown R1(config-if)#description To-R2 R1(config-if)#duplex full R1(config-if)#speed 100 R1(config-if)#exit R1(config)#interface fastEthernet 0/1 R1(config-if)#ip address 172.16.2.1 255.255.255.252 R1(config-if)#no shutdown R1(config-if)#description To-R3 R1(config-if)#duplex full R1(config-if)#speed 100 R1(config-if)#exit R1(config)#router ospf 1 R1(config-router)#network 172.16.1.0 0.0.0.3 area 0 R1(config-router)#network 172.16.2.0 0.0.0.3 area 0 R1(config-router)#exit
R2#conf t R2(config)#interface fastEthernet 0/0 R2(config-if)#ip address 172.16.1.2 255.255.255.252 R2(config-if)#no shutdown R2(config-if)#description To-R1 R2(config-if)#duplex full R2(config-if)#speed 100 R2(config-if)#exit R2(config)#interface fastEthernet 0/1 R2(config-if)#ip address 172.16.0.1 255.255.255.252 R2(config-if)#no shutdown R2(config-if)#description To-XYZ-DHK R2(config-if)#duplex full R2(config-if)#speed 100 R2(config-if)#exit R2(config)#router ospf 1 R2(config-router)#network 172.16.1.0 0.0.0.3 area 0 R2(config-router)#network 172.16.0.0 0.0.0.3 area 0 R2(config-router)#passive-interface fastEthernet 0/1 R2(config-router)#exit
R3#conf t R3(config)#interface fastEthernet 0/0 R3(config-if)#ip address 172.16.2.2 255.255.255.252 R3(config-if)#no shutdown R3(config-if)#description To-R1 R3(config-if)#duplex full R3(config-if)#speed 100 R3(config-if)#exit R3(config)#interface fastEthernet 0/1 R3(config-if)#ip address 172.16.3.1 255.255.255.252 R3(config-if)#no shutdown R3(config-if)#description To-XYZ-CTG R3(config-if)#duplex full R3(config-if)#speed 100 R3(config-if)#exit R3(config)#router ospf 1 R3(config-router)#network 172.16.2.0 0.0.0.3 area 0 R3(config-router)#network 172.16.3.0 0.0.0.3 area 0 R3(config-router)#passive-interface fastEthernet 0/1 R3(config-router)#exit
এই OSPF কনফিগার করার উদ্দেশ্য হলো আই.এস.পি নেটওয়ার্কে থাকা একটি রাউটারের সাথে আরেকটি রাউটারের যোগাযোগ নিশ্চিত করা।
অতঃপর আমরা XYZ-DHK এবং XYZ-CTG রাউটারের আই.পি কনফিগার করে নিই।
XYZ-DHK#conf t XYZ-DHK(config)#interface fastEthernet 0/0 XYZ-DHK(config-if)#ip address 172.16.0.2 255.255.255.252 XYZ-DHK(config-if)#no shutdown XYZ-DHK(config-if)#description To-ISP XYZ-DHK(config-if)#duplex full XYZ-DHK(config-if)#speed 100 XYZ-DHK(config-if)#exit
XYZ-CTG#conf t XYZ-CTG(config)#interface fastEthernet 0/0 XYZ-CTG(config-if)#ip address 172.16.3.2 255.255.255.252 XYZ-CTG(config-if)#no shutdown XYZ-CTG(config-if)#description To-ISP XYZ-CTG(config-if)#duplex full XYZ-CTG(config-if)#speed 100 XYZ-CTG(config-if)#exit
আই.পি কনফিগারেশনের পর আমরা XYZ-DHK এবং XYZ-CTG রাউটারে দুইটি স্ট্যাটিক রাউট কনফিগার করবো যাতে রাউটারদ্বয় আই.এস.পি নেটওয়ার্কের মধ্য দিয়ে পরষ্পরের সাথে কমিউনিকেট করতে পারে।
XYZ-DHK#conf t XYZ-DHK(config)#ip route 172.16.3.0 255.255.255.252 172.16.0.1 XYZ-DHK(config)#exit
XYZ-CTG#conf t XYZ-CTG(config)#ip route 172.16.0.0 255.255.255.252 172.16.3.1 XYZ-CTG(config)#exit
রাউট কনফিগার করা শেষ হলে আমরা XYZ-DHK থেকে XYZ-CTG রাউটারের কানেক্টিভিটি চেক করে নিই।
XYZ-DHK#ping 172.16.3.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.3.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 60/79/112 ms
XYZ-CTG#ping 172.16.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 48/72/92 ms
এখন আমরা XYZ-DHK এবং XYZ-CTG রাউটারদ্বয়ের মধ্যে L2TPv3 কনফিগার করবো। এজন্য নিম্নলিখিত ধাপগুলো অনুসরণ করতে হবে।
ধাপ-১: রাউটারসমূহে CEF এনাবল করা ধাপ-২: রাউটারসমূহে Pseudowire এর End-Point হিসেবে Loopback ইন্টারফেসের আই.পি এ্যাড্রেস ব্যবহার করা (অপশনাল) ধাপ-৩: L2TP Class কনফিগার করা (অপশনাল) ধাপ-৪: Pseudowire Class কনফিগার করা ধাপ-৫: Pseudowire Class এর সাথে Attachment Circuit বাইন্ড করা
XYZ-DHK রাউটারে...
XYZ-DHK#conf t XYZ-DHK(config)#ip cef XYZ-DHK(config)#exit
L2TPv3 টানেল কনফিগারেশনের শুরুতেই Cisco রাউটারসমূহে CEF ফিচারটি এনাবল করতে হবে। Cisco রাউটারসমূহে এই CEF ফিচারটি বাই ডিফল্ট এনাবল করাই থাকে। CEF ফিচারটি কোন কারণে ডিসএ্যাবল থাকলে রাউটারে Pseudowire কাজ করবে না। CEF সম্পর্কে জানার জন্য আপনারা আমার লেখা www.mn-lab.net/cisco-load-balancing.php এই টিউটোরিয়ালটি দেখে নিতে পারেন।
অনুরূপভাবে, XYZ-CTG রাউটারে...
XYZ-CTG#conf t XYZ-CTG(config)#ip cef XYZ-CTG(config)#exit
চিত্রে প্রদত্ত টপোলজি অনুযায়ী, ক্লায়েন্ট XYZ এর ঢাকা এবং চট্টগ্রামের রাউটারদ্বয়ের মধ্যে অর্থাৎ 172.16.0.2 এবং 172.16.3.2 এর মধ্যে L2TPv3 টানেল কনফিগার করা হবে। এখানে, 172.16.0.2 এবং 172.16.3.2 উভয় End-Point ই সংশ্লিষ্ট রাউটারের ফিজিক্যাল ইন্টারফেসের আই.পি। কিন্তু এই End-Point হিসেবে রাউটারের Loopback ইন্টারফেসের আই.পি ব্যবহার করা ভালো। কারণ, Loopback ইন্টারফেস কখনো DOWN হয় না। এছাড়াও ফিজিক্যাল ইন্টারফেসে আই.পি এ্যালিয়াসিং (একই ইন্টারফেসে একাধিক আই.পি) করা থাকলে অথবা Redundancy এর জন্য একাধিক WAN লিঙ্ক থাকলে End-Point হিসেবে Loopback ইন্টারফেসের আই.পি ব্যবহার করতে হয়। তবে সেক্ষেত্রে রাউটারদ্বয়ের Loopback ইন্টারফেসের আই.পি সমূহের মধ্যে অবশ্যই রাউটিং রিচেবিলিটি থাকতে হবে। আমরা আমাদের টপোলজিতে End-Point হিসেবে Loopback ইন্টারফেসের আই.পি ব্যবহার করি নাই (যেহেতু এটি অপশনাল)।
L2TP Class হলো অপশনাল। আমরা টিউটোরিয়ালের শেষের দিকে L2TP Class কনফিগারেশন নিয়ে আলোচনা করবো।
এই ধাপে আমরা XYZ-DHK রাউটারে Pseudowire Class কনফিগার করবো।
XYZ-DHK#conf t XYZ-DHK(config)#pseudowire-class ABC XYZ-DHK(config-pw-class)#encapsulation l2tpv3 XYZ-DHK(config-pw-class)#ip local interface fastEthernet 0/0 XYZ-DHK(config-pw-class)#exit
এখানে, ABC হলো pseudowire-class এর একটি একটি ভ্যারিয়েবল নাম এবং উভয় রাউটারে একই হওয়া জরুরী নয়। এখানে এনক্যাপসুলেশন টেকনিক হিসেবে l2tpv3 কনফিগার করা হয়েছে। MPLS Layer-2 Tunneling এর ক্ষেত্রে এনক্যাপসুলেশন টেকনিক হিসেবে mpls ব্যবহার করতে হয়। এনক্যাপসুলেশন টেকনিক কনফিগার করার পর যদি কোন কারণে তা পরিবর্তন করতে হয় তাহলে # no pseudowire-class ABC কমান্ডের মাধ্যমে pseudowire-class কে রিমুভ করে আবার নতুন করে কনফিগার করতে হবে।
এখানে, ip local interface হিসেবে FastEthernet0/0 কনফিগার করা হয়েছে, যেহেতু আমরা FastEthernet0/0 এর আই.পি 172.16.0.2 কে End-Point হিসেবে ব্যবহার করেছি।
অনুরূপভাবে, XYZ-CTG রাউটারে...
XYZ-CTG#conf t XYZ-CTG(config)#pseudowire-class ABC XYZ-CTG(config-pw-class)#encapsulation l2tpv3 XYZ-CTG(config-pw-class)#ip local interface fastEthernet 0/0 XYZ-CTG(config-pw-class)#exit
অতঃপর XYZ-DHK রাউটারের যে ইন্টারফেসটি LAN এর সাথে যুক্ত সে ইন্টারফেসটিকে pw-class ABC এর সাথে যুক্ত করতে হবে।
XYZ-DHK#conf t XYZ-DHK(config)#interface FastEthernet0/1 XYZ-DHK(config-if)#no ip address XYZ-DHK(config-if)#xconnect 172.16.3.2 10 encapsulation l2tpv3 pw-class ABC
এখানে একটি বিষয় লক্ষ্য রাখতে হবে যেন ঐ ইন্টারফেসে কোন আই.পি এ্যাড্রেস কনফিগার করা না থাকে। যদি থাকে তাহলে তা রিমুভ করে দিতে হবে।
xconnect 172.16.3.2 10 encapsulation l2tpv3 pw-class ABCএখানে, Attachment Circuit বাইন্ড করার সময় Remote End-Point এর আই.পি (172.16.3.2), VC আই.ডি (10) এবং রাউটারের নিজের pseudowire-class এর নাম (ABC) উল্লেখ করতে হবে। উভয় রাউটারে VC আই.ডি অবশ্যই একই হতে হবে।
অনুরূপভাবে, XYZ-CTG রাউটারে...
XYZ-CTG#conf t XYZ-CTG(config)#interface FastEthernet0/1 XYZ-CTG(config-if)#no ip address XYZ-CTG(config-if)#xconnect 172.16.0.2 10 encapsulation l2tpv3 pw-class ABC
উভয় End-Point রাউটারে উপরিউক্তভাবে কনফিগারেশন শেষ করলে রাউটারদ্বয়ের মধ্যে L2TPv3 টানেল ও সেশন UP হবে।
XYZ-DHK#show l2tun L2TP Tunnel and Session Information Total tunnels 1 sessions 1 LocID RemID Remote Name State Remote Address Port Sessions L2TP Class/ VPDN Group 32236 15332 R3 est 172.16.3.2 0 1 l2tp_default_cl LocID RemID TunID Username, Intf/ State Last Chg Uniq ID Vcid, Circuit 20520 39889 32236 10, Fa0/1 est 00:01:03 3
সবশেষে, আমরা ঢাকা ও চট্টগ্রামের দুই পাশের দুই কম্পিউটারে একই সাবনেটের দুইটি আই.পি বসিয়ে কানেক্টিভিটি চেক করে দেখবো।
C:\Users\User>ping 192.168.10.20 Pinging 192.168.10.20 with 32 bytes of data: Reply from 192.168.10.20: bytes=32 time=14ms TTL=64 Reply from 192.168.10.20: bytes=32 time=11ms TTL=64 Reply from 192.168.10.20: bytes=32 time=14ms TTL=64 Reply from 192.168.10.20: bytes=32 time=21ms TTL=64 Ping statistics for 192.168.10.20: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 11ms, Maximum = 21ms, Average = 15ms
আমরা এখানে দেখতে পাচ্ছি যে, ঢাকা অফিসের LAN এর PC থেকে চট্টগ্রাম অফিসের LAN এর PC কে PING পাওয়া যাচ্ছে। অর্থাৎ আমাদের ঢাকা অফিসের LAN এর PC থেকে চট্টগ্রাম অফিসের LAN এর মধ্যে ডাটা ট্রান্সমিট হচ্ছে।
এখানে একটি কথা বিশেষভাবে উল্লেখ্য যে, আমরা আমাদের এই টিউটোরিয়ালে ক্লায়েন্ট এর রাউটারসমূহকে LCCE হিসেবে কনফিগার করেছি। অনেক ক্ষেত্রে প্রয়োজন হলে আই.এস.পি এর Provider Edge (PE) রাউটারসমূহকেও LCCE হিসেবে কনফিগার করে ক্লায়েন্টকে Layer-2 ডাটা কানেক্টিভিটি দেওয়া যায়।
L2TPv3 কনফিগারেশনের তৃতীয় ধাপটি আমরা স্কীপ করে গিয়েছিলাম আর সেটি হলো L2TP Class কনফিগার করা। এটি একটি অপশনাল কাজ। যদি খুব বেশি প্রয়োজন না থাকে তাহলে একটি কনফিগার না করলেও চলে। এই L2TP Class এর মাধ্যমে Keepalive Timer পরিরর্তন করা, Control Connection Authentication এর জন্য Hostname পরিবর্তন করা, Password সেট করা, Retransmit ও Timeout ভ্যালু সেট করা সহ আরো কিছু কাজ করা যায়।
উদাহরণস্বরূপ, Keepalive Timer এর কথা বলা যেতে পারে। Keepalive Timer হলো এক ধরণের Hello Message যা একটি LCCE রাউটার টানেলের অপর পাশে থাকা আরেকটি LCCE রাউটারকে একটি নির্দিষ্ট বিরতিতে পাঠাতে থাকে টানেল UP আছে কিনা তা চেক করার জন্য। L2TPv3 এর ক্ষেত্রে ডিফল্ট Keepalive/Hello Timer হলো 60 সেকেন্ড। যদি আমরা এটি পরিবর্তন করতে চাই তাহলে তা L2TP Class কনফিগারের মাধ্যমে করতে পারি।
XYZ-DHK#conf t XYZ-DHK(config)#l2tp-class XYZ XYZ-DHK(config-l2tp-class)#hello 10 XYZ-DHK(config-l2tp-class)#exit
প্রথমে XYZ নামে (ভ্যারিয়েবল) একটি l2tp-class তৈরী করে সেখানে #hello 10 কমান্ডের মাধ্যমে Keepalive/Hello Timer ভ্যালু 10 সেকেন্ডে সেট করা হলো।
XYZ-DHK#conf t XYZ-DHK(config)#no pseudowire-class ABC XYZ-DHK(config)#pseudowire-class ABC XYZ-DHK(config-pw-class)#encapsulation l2tpv3 XYZ-DHK(config-pw-class)#protocol l2tpv3 XYZ XYZ-DHK(config-pw-class)#ip local interface FastEthernet0/0 XYZ-DHK(config-pw-class)#exit
অতঃপর পূর্বে কনফিগারকৃত ABC নামক pseudowire-class টি কে #no pseudowire-class ABC কমান্ডের মাধ্যমে রিমুভ করে নতুন করে কনফিগার করা হলো এবং নতুন করে কনফিগারেশনের সময় #protocol l2tpv3 XYZ কমান্ডের মাধ্যমে সদ্য কনফিগারকৃত l2tp-class XYZ কে ডিফাইন করা হলো। (যদি l2tp-class কনফিগারেশনের আগেই pseudowire-class কনফিগার করা হয়, এবং পরবর্তীতে কোন কারণে l2tp-class কনফিগারেশনের প্রয়োজন হয় তাহলে l2tp-class কনফিগার করার পর তা কার্যকর করার জন্য pseudowire-class টি রিমুভ করে নতুন করে কনফিগার করার প্রয়োজন হয়।)
আশাকরি এই টিউটোরিয়ালটি দেখে আপনারা L2TPv3 সম্পর্কে কিছুটা ধারণা পাবেন এবং Cisco রাউটারে কিভাবে L2TPv3 Tunnel কনফিগার করতে হয় তাও জানতে পারবেন। ভাল থাকবেন, আল্লাহ হাফেজ।