IP-L2TP(8) دستورهای مدیریتی لینوکس IP-L2TP(8)

ip-l2tp - مدیریت تونلهای پروتکل لایه ۲ (L2TPv3)


ip [ OPTIONS ] l2tp { COMMAND | help }

ip l2tp add tunnel
remote ADDR local ADDR
tunnel_id ID peer_tunnel_id ID
[ encap { ip | udp } ]
[ udp_sport PORT ] [ udp_dport PORT ]
[ udp_csum { on | off } ]
[ udp6_csum_tx { on | off } ]
[ udp6_csum_rx { on | off } ]
ip l2tp add session [ name NAME ]
tunnel_id ID session_id ID peer_session_id ID
[ cookie HEXSTR ] [ peer_cookie HEXSTR ]
[ l2spec_type { none | default } ]
[ seq { none | send | recv | both } ]
ip l2tp del tunnel tunnel_id ID
ip l2tp del session tunnel_id ID session_id ID
ip l2tp show tunnel [ tunnel_id ID ]
ip l2tp show session [ tunnel_id ID.B ] [ session_id ID ]
NAME := STRING ADDR := { IP_ADDRESS | any } PORT := { NUMBER } ID := { NUMBER } HEXSTR := { 8 or 16 hex digits (4 / 8 bytes) }

دستورات ip l2tp برای برقراری تونل‌های اترنت ایستا یا به اصطلاح مدیریت‌نشده‌ی L2TPv3 استفاده می‌شوند. برای تونل‌های مدیریت‌نشده، هیچ پروتکل کنترلی L2TP وجود ندارد، بنابراین به هیچ دیمن فضای کاربری نیازی نیست - تونل‌ها با اجرای دستی دستورات در سیستم محلی و در طرف راه دور (peer) ایجاد می‌شوند.

پروتکل L2TPv3 برای ایجاد تونل‌های لایه ۲ (Layer-2) مناسب است. تونل‌های ایستا در زمان ثابت بودن تونل‌ها، برای برقراری پیوندهای شبکه‌ای از میان شبکه‌های IP بسیار مفید هستند. تونل‌های L2TPv3 می‌توانند داده‌های بیش از یک نشست (session) را انتقال دهند. هر نشست با یک session_id و شناسه تونل والد آن یعنی tunnel_id مشخص می‌شود. قبل از اینکه بتوان نشستی را درون یک تونل ایجاد کرد، باید خود تونل ایجاد شده باشد.

هنگام ایجاد یک تونل L2TP، آدرس IP طرف راه دور مشخص می‌شود که می‌تواند آدرس IPv4 یا IPv6 باشد. همچنین باید آدرس IP محلی که برای دسترسی به طرف مقابل استفاده می‌شود، تعیین گردد. این همان آدرسی است که سیستم محلی روی آن گوش فرا داده و بسته‌های داده‌ی دریافتی L2TP را از طرف مقابل می‌پذیرد.

پروتکل L2TPv3 دو قالب کپسوله‌سازی بسته را تعریف می‌کند: UDP یا IP. کپسوله‌سازی UDP رایج‌ترین روش است. کپسوله‌سازی IP از یک مقدار اختصاصی پروتکل IP برای حمل داده‌های L2TP بدون سربار UDP استفاده می‌کند. تنها زمانی از کپسوله‌سازی IP استفاده کنید که هیچ دستگاه NAT یا دیوار آتشی در مسیر شبکه وجود نداشته باشد.

هنگامی که یک نشست اترنت L2TPv3 ایجاد می‌شود، یک رابط شبکه مجازی برای نشست ایجاد می‌گردد که درست مانند هر رابط شبکه دیگری باید پیکربندی شده و فعال (up) شود. هنگامی که داده‌ها از طریق این رابط ارسال می‌شوند، از طریق تونل L2TP به طرف مقابل منتقل می‌گردند. با پیکربندی جدول‌های مسیریابی سیستم یا افزودن رابط به یک پل (bridge)، رابط L2TP مانند یک سیم مجازی (pseudowire) متصل به طرف مقابل عمل می‌کند.

برقراری یک سیم مجازی اترنت مدیریت‌نشده‌ی L2TPv3 مستلزم ایجاد دستی بافت‌های L2TP در سیستم محلی و طرف مقابل است. پارامترهای مورد استفاده در هر دو طرف باید دقیقاً با یکدیگر همخوانی داشته باشند، در غیر این صورت هیچ داده‌ای عبور نخواهد کرد. از آنجا که هیچ پروتکل کنترلی برای برقراری تونل‌های مدیریت‌نشده‌ی L2TP استفاده نمی‌شود، امکان بررسی خودکار سازگاری مقادیر وجود ندارد. هنگامی که رابط شبکه مجازی یک نشست L2TP مشخص پیکربندی و فعال شد، داده‌ها می‌توانند ارسال شوند، حتی اگر طرف مقابل هنوز پیکربندی نشده باشد. اگر طرف مقابل پیکربندی نشده باشد، بسته‌های داده‌ی L2TP توسط آن دور ریخته خواهند شد.

برای برقراری یک تونل مدیریت‌نشده‌ی L2TP، از دستورات l2tp add tunnel و l2tp add session که در این سند توضیح داده شده‌اند استفاده کنید. سپس بر حسب نیاز، رابط شبکه مجازی تونل را پیکربندی و فعال نمایید.

توجه داشته باشید که تونل‌های مدیریت‌نشده تنها فریم‌های اترنت را منتقل می‌کنند. اگر نیاز به انتقال ترافیک PPP دارید (L2TPv2) یا طرف مقابل شما از تونل‌های مدیریت‌نشده‌ی L2TPv3 پشتیبانی نمی‌کند، به یک کارساز L2TP نیاز خواهید داشت که پروتکل کنترلی L2TP را پیاده‌سازی کرده باشد. پروتکل کنترلی L2TP اجازه می‌دهد تونل‌ها و نشست‌های L2TP پویا ایجاد شوند و سازوکارهایی برای تشخیص و واکنش به خرابی‌های شبکه فراهم می‌آورد.

شناسه تونل را تعیین می‌کند که یک مقدار عددی صحیح ۳۲ بیتی است. تونل را به صورت یکتا مشخص می‌کند. مقدار استفاده‌شده باید با مقدار peer_tunnel_id مورد استفاده در طرف مقابل مطابقت داشته باشد.
شناسه تونل طرف مقابل را تعیین می‌کند که یک مقدار عددی صحیح ۳۲ بیتی اختصاص‌یافته به تونل توسط طرف مقابل است. مقدار استفاده‌شده باید با مقدار tunnel_id مورد استفاده در طرف مقابل مطابقت داشته باشد.
آدرس IP طرف راه دور را مشخص می‌کند. می‌تواند به عنوان آدرس IPv4 یا IPv6 تعیین شود.
آدرس IP رابط محلی را که برای تونل استفاده می‌شود مشخص می‌کند. این آدرس باید آدرس یکی از رابط‌های محلی باشد. می‌تواند به عنوان آدرس IPv4 یا IPv6 تعیین شود.
نوع کپسوله‌سازی تونل را تعیین می‌کند.
مقادیر معتبر برای کپسوله‌سازی عبارتند از: udp, ip.
درگاه مبدأ UDP مورد استفاده برای تونل را تعیین می‌کند. هنگام انتخاب کپسوله‌سازی udp الزامی است. هنگام انتخاب کپسوله‌سازی ip نادیده گرفته می‌شود.
درگاه مقصد UDP مورد استفاده برای تونل را تعیین می‌کند. هنگام انتخاب کپسوله‌سازی udp الزامی است. هنگام انتخاب کپسوله‌سازی ip نادیده گرفته می‌شود.
(فقط IPv4) تعیین می‌کند که در صورت انتخاب کپسوله‌سازی UDP، آیا چکسام UDP مربوط به IPv4 برای بسته‌های کپسوله‌شده محاسبه و بررسی شود یا خیر. پیش‌فرض off. است.
مقادیر معتبر عبارتند از: on, off.
(فقط IPv6) تعیین می‌کند که در صورت انتخاب کپسوله‌سازی UDP، آیا چکسام UDP مربوط به IPv6 برای بسته‌های کپسوله‌شده ارسالی محاسبه شود یا خیر. پیش‌فرض on. است.
مقادیر معتبر عبارتند از: on, off.
(فقط IPv6) تعیین می‌کند که در صورت انتخاب کپسوله‌سازی UDP، آیا چکسام UDP مربوط به IPv6 برای بسته‌های کپسوله‌شده دریافتی بررسی شود یا خیر. پیش‌فرض on. است.
مقادیر معتبر عبارتند از: on, off.

شناسه تونلی را که باید حذف شود مشخص می‌کند. ابتدا باید تمام نشست‌های درون تونل حذف شوند.

شناسه تونلی را که باید اطلاعات آن نمایش داده شود مشخص می‌کند. اگر مشخص نشود، اطلاعات مربوط به همه تونل‌ها چاپ می‌شود.

نام رابط شبکه نشست را تعیین می‌کند. مقدار پیش‌فرض l2tpethN است.
شناسه تونل را تعیین می‌کند که یک مقدار عددی صحیح ۳۲ بیتی است. تونلی را که نشست درون آن ایجاد خواهد شد به صورت یکتا مشخص می‌کند. تونل باید از قبل وجود داشته باشد.
شناسه نشست را تعیین می‌کند که یک مقدار عددی صحیح ۳۲ بیتی است. نشستی را که در حال ایجاد است به صورت یکتا مشخص می‌کند. مقدار استفاده‌شده باید با مقدار peer_session_id مورد استفاده در طرف مقابل مطابقت داشته باشد.
شناسه نشست طرف مقابل را تعیین می‌کند که یک مقدار عددی صحیح ۳۲ بیتی اختصاص‌یافته به نشست توسط طرف مقابل است. مقدار استفاده‌شده باید با مقدار session_id مورد استفاده در طرف مقابل مطابقت داشته باشد.
یک مقدار کوکی اختیاری را برای اختصاص به نشست مشخص می‌کند. این مقدار ۴ یا ۸ بایتی است که به صورت ۸ یا ۱۶ رقم هگزادسیمال مشخص می‌شود، مانند 014d3636deadbeef. این مقدار باید با مقدار peer_cookie تنظیم‌شده در طرف مقابل مطابقت داشته باشد. مقدار کوکی در بسته‌های داده‌ی L2TP حمل شده و در طرف مقابل برای بررسی انطباق با مقدار مورد انتظار ارزیابی می‌شود. مقدار پیش‌فرض استفاده نکردن از کوکی است.
یک مقدار اختیاری peer_cookie را برای اختصاص به نشست مشخص می‌کند. این مقدار ۴ یا ۸ بایتی است که به صورت ۸ یا ۱۶ رقم هگزادسیمال مشخص می‌شود، مانند 014d3636deadbeef. این مقدار باید با مقدار cookie تنظیم‌شده در طرف مقابل مطابقت داشته باشد. این گزینه به سیستم محلی اعلام می‌کند چه مقدار کوکی را در بسته‌های L2TP دریافتی انتظار داشته باشد. مقدار پیش‌فرض استفاده نکردن از کوکی است.
نوع هدر اختصاصی لایه ۲ (layer2specific header) نشست را مشخص می‌کند.
مقادیر معتبر عبارتند از: none, default.
شماره‌گذاری توالی را برای جلوگیری از دریافت نامرتب بسته‌ها یا تشخیص آنها کنترل می‌کند. send یک شماره توالی را در هدر اختصاصی پیش‌فرض لایه ۲ برای هر بسته ارسالی قرار می‌دهد. recv بسته‌ها را در صورت دریافت نامرتب، مجدداً مرتب‌سازی می‌کند. پیش‌فرض none. است.
مقادیر معتبر عبارتند از: none, send, recv, both.

شناسه تونلی را که نشست مورد نظر برای حذف در آن قرار دارد مشخص می‌کند.
شناسه نشستی را که باید حذف شود مشخص می‌کند.

شناسه تونل نشست(هایی) را که باید نمایش داده شوند مشخص می‌کند. اگر مشخص نشود، اطلاعات نشست‌های موجود در تمام تونل‌ها چاپ می‌شود.
شناسه نشستی را که باید اطلاعات آن نمایش داده شود مشخص می‌کند. اگر مشخص نشود، اطلاعات همه نشست‌ها چاپ می‌شود.

site-A:# ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 \
           encap udp local 1.2.3.4 remote 5.6.7.8 \
           udp_sport 5000 udp_dport 6000
site-A:# ip l2tp add session tunnel_id 3000 session_id 1000 \
           peer_session_id 2000
site-B:# ip l2tp add tunnel tunnel_id 4000 peer_tunnel_id 3000 \
           encap udp local 5.6.7.8 remote 1.2.3.4 \
           udp_sport 6000 udp_dport 5000
site-B:# ip l2tp add session tunnel_id 4000 session_id 2000 \
           peer_session_id 1000
site-A:# ip link set l2tpeth0 up mtu 1488
site-B:# ip link set l2tpeth0 up mtu 1488

توجه داشته باشید که آدرس‌های IP، درگاه‌های UDP و شناسه‌های تونل / نشست در هر دو سمت مطابقت داده شده و معکوس یکدیگر تنظیم شده‌اند.

در صورتی که فقط داده‌های IP جابه‌جا شوند، این دو رابط می‌توانند با آدرس‌های IP پیکربندی شوند. این پیکربندی احتمالاً ساده‌ترین حالت ممکن است.

site-A:# ip addr add 10.42.1.1 peer 10.42.1.2 dev l2tpeth0
site-B:# ip addr add 10.42.1.2 peer 10.42.1.1 dev l2tpeth0
site-A:# ping 10.42.1.2

اکنون این پیوند باید قابل استفاده باشد. در صورت نیاز مسیرهای ایستا (static routes) را اضافه کنید تا داده‌ها از طریق پیوند جدید ارسال شوند.

برای انتقال داده‌های غیر IP، رابط شبکه L2TP با استفاده از ابزارهای استاندارد لینوکس، به جای اختصاص آدرس IP مستقل، به یک پل (bridge) افزوده می‌شود. از آنجا که در این حالت فریم‌های خام اترنت درون تونل حمل می‌شوند، مقدار MTU رابط‌های L2TP باید طوری تنظیم شود که فضای کافی برای آن هدرها در نظر گرفته شود.

site-A:# ip link set l2tpeth0 up mtu 1446
site-A:# ip link add br0 type bridge
site-A:# ip link set l2tpeth0 master br0
site-A:# ip link set eth0 master br0
site-A:# ip link set br0 up

اگر از VLANها استفاده می‌کنید، برای هر VLAN یک پل راه‌اندازی کنید و هر VLAN را از طریق یک نشست مجزای L2TP پل‌بندی (bridge) نمایید. به عنوان مثال، برای پل کردن شناسه VLAN شماره ۵ روی eth1 از طریق سیم مجازی L2TP:

site-A:# ip link set l2tpeth0 up mtu 1446
site-A:# ip link add brvlan5 type bridge
site-A:# ip link set l2tpeth0.5 master brvlan5
site-A:# ip link set eth1.5 master brvlan5
site-A:# ip link set brvlan5 up

افزودن رابط L2TP به یک پل باعث می‌شود که پل، درست مانند سایر رابط‌ها ترافیک را از طریق سیم مجازی L2TP هدایت کند. پل آدرس‌های MAC میزبان‌های متصل به هر رابط را یاد می‌گیرد و فریم‌ها را به طور هوشمند از یک درگاه پل به درگاه دیگر هدایت می‌کند. آدرس‌های IP به رابط‌های l2tpethN اختصاص داده نمی‌شوند. اگر پل در هر دو سمت سیم مجازی L2TP به درستی پیکربندی شده باشد، دسترسی به میزبان‌های موجود در شبکه پل‌شده‌ی طرف مقابل امکان‌پذیر خواهد بود.

هنگامی که فریم‌های خام اترنت از طریق یک تونل L2TP پل‌بندی می‌شوند، فریم‌های بزرگ ممکن است قطعه‌قطعه (fragment) شده و بسته به MTU رابط فیزیکی مورد استفاده توسط تونل، به صورت قطعات IP مجزا به گیرنده ارسال شوند. زمانی که فریم‌های اترنت حامل پروتکل‌هایی باشند که توسط گیرنده سرهم‌بندی (reassemble) می‌شوند (مانند IP)، مشکلی پیش نخواهد آمد. با این حال، چنین قطعه‌قطعه‌شدنی می‌تواند برای پروتکل‌هایی مانند PPPoE که در آنها گیرنده انتظار دارد فریم‌های اترنت را دقیقاً به همان صورت که ارسال شده دریافت کند، مشکل‌ساز شود. در چنین مواردی، مهم است فریم‌هایی که از تونل خارج می‌شوند، قبل از هدایت به جلو، دوباره در قالب یک فریم واحد سرهم‌بندی شوند. برای این منظور، ردیابی اتصالات نت‌فیلتر (conntrack) را فعال کرده یا ماژول‌های defrag نت‌فیلتر لینوکس را در هر دو نقطه پایانی تونل به صورت دستی بارگذاری کنید.

site-A:# modprobe nf_defrag_ipv4
site-B:# modprobe nf_defrag_ipv4

اگر L2TP روی IPv6 استفاده می‌شود، از ماژول defrag مربوط به IPv6 استفاده کنید.

تونل‌های ایستا (مدیریت‌نشده‌ی) L2TPv3 توسط برخی از سازندگان تجهیزات شبکه مانند Cisco پشتیبانی می‌شوند.

در لینوکس، پیام‌های Hello پروتکل L2TP در تونل‌های مدیریت‌نشده پشتیبانی نمی‌شوند. پیام‌های Hello توسط کارخواه‌ها و کارسازهای L2TP به منظور تشخیص خرابی‌های پیوند و خودکارسازی قطع و برقراری مجدد تونل‌های پویا استفاده می‌شوند. اگر یک طرف مقابل غیر لینوکسی از پیام‌های Hello در تونل‌های مدیریت‌نشده پشتیبانی می‌کند، برای سازگاری با لینوکس باید این قابلیت در آن خاموش شود.

لینوکس به طور پیش‌فرض از نوع هدر Default Layer2SpecificHeader همان‌گونه که در مشخصات پروتکل L2TPv3 (سند RFC3931) تعریف شده، استفاده می‌کند. این تنظیم باید با پیکربندی طرف مقابل یکسان و سازگار باشد. پیاده‌سازی‌های برخی از سازندگان (مانند Cisco) به طور پیش‌فرض از نوع هدر None برای Layer2SpecificHeader استفاده می‌کنند.

ip(8)

James Chapman <jchapman@katalix.com>

19 Apr 2012 iproute2