.TH keepalived.conf 5 2026-07-05 "Keepalived" "Keepalived Configuration's Manual" .SH "نام (NAME)" keepalived.conf \- پرونده پیکربندی keepalived .br .PP .SH "یادداشت: (Note:)" این مستندات باید به عنوان منبع جامع و مرجع اطلاعات برای پیکربندی Keepalived در نظر گرفته شود. این مستندات توسط تیم اصلی Keepalived پشتیبانی و نگهداری می‌شود. .PP .SH "توضیحات (DESCRIPTION)" پرونده \fBkeepalived.conf\fR پرونده پیکربندی است که تمام کلیدواژه‌های Keepalived را شرح می‌دهد. کلیدواژه‌ها در سلسله‌مراتبی از بلوک‌ها و زیربلوک‌ها قرار می‌گیرند که هر لایه با جفت‌های '{' و '}' مشخص می‌شود. .PP توضیحات با '#' یا '!' تا انتهای خط آغاز می‌شوند و می‌توانند از هر کجای خط شروع شوند. .PP کلیدواژه 'include' و گونه‌های آن امکان گنجاندن پرونده‌های پیکربندی دیگر را از درون پرونده پیکربندی اصلی یا از پرونده‌های گنجانده‌شده بعدی فراهم می‌کنند. .PP قالب دستور include به شرح زیر است: \fBinclude\fR FILENAME .PP مقدار FILENAME می‌تواند یک مسیر کامل یا نسبی باشد و شامل نویسه‌های عام (wildcard)، از جمله عبارات کروشه‌ای سبک csh مانند "{foo/{,cat,dog},bar}" در صورت پشتیبانی glob() باشد. .PP پس از باز کردن یک پرونده گنجانده‌شده، دایرکتوری جاری به دایرکتوری خود آن پرونده تنظیم می‌شود؛ بنابراین هر مسیر نسبی گنجانده‌شده از یک پرونده، نسبت به دایرکتوری خود همان پرونده در نظر گرفته می‌شود. گونه‌های include بررسی‌های بیشتری را به سطح include_check جاری اضافه می‌کنند (زیر را ببینید) گونه‌ها عبارتند از: .br \fBincluder\fR FILENAME \- همانند include_check readable .br \fBincludem\fR FILENAME \- همانند include_check match .br \fBincludew\fR FILENAME \- همانند include_check wildcard_match .br \fBincludeb\fR FILENAME \- همانند include_check brace_match .br \fBincludea\fR FILENAME \- تمام بررسی‌های include_check .PP نکته: اگر تابع glob() در libc از GLOB_ALTDIRFUNC پشتیبانی نکند (مانند Musl libc در Alpine Linux و غیره)، تنها گزینه‌های includea، includer و includew از میان موارد بالا کار خواهند کرد. .PP چرا می‌خواهیم خطاها مجاز باشند؟ فرض کنید یک پیکربندی دارای پرونده‌های اختیاری در /etc/keepalived/conf.d باشد، در این صورت می‌توان \fIinclude_/etc/keepalived/conf.d/*\fR را مشخص کرد، اما اگر پرونده‌ای در دایرکتوری وجود نداشته باشد نباید خطایی رخ دهد؛ در چنین حالتی باید از \fIincluder\fR استفاده شود. در غیر این صورت، استفاده از \fIincludea\fR منطقی است. اگر در خط include از پیکربندی شرطی یا جایگزینی پارامتر استفاده شود، مدیریت include کار نخواهد کرد؛ زیرا تشخیص کلیدواژه‌های include قبل از پردازش پیکربندی شرطی و جایگزینی پارامتر انجام می‌شود. کلیدواژه پایه‌ای \fIinclude\fR برای سازگاری با گذشته حفظ شده است، زیرا در صورت عدم امکان باز کردن پرونده‌ها و موارد مشابه، خطای پیکربندی ایجاد نمی‌کند. .PP .SH "نحو پارامترها (PARAMETER SYNTAX)" \fB\fR یکی از مقادیر on|off|true|false|yes|no است. .br \fB\fR یک مقدار زمانی بر حسب ثانیه است، شامل بخش اعشاری ثانیه، مانند 2.71828 یا 3؛ دقت زمان‌سنج بر حسب میکروثانیه است. .SH "اسکریپت‌ها (SCRIPTS)" سه دسته از اسکریپت‌ها را می‌توان برای اجرا پیکربندی کرد. (a) اسکریپت‌های اعلان (Notify) که هنگام تغییر وضعیت یک نمونه vrrp یا گروه vrrp، یا تغییر حد نصاب (quorum) یک سرور مجازی بین بالا (up) و پایین (down) اجرا می‌شوند. (b) اسکریپت‌های ردیابی vrrp (vrrp tracking scripts) که در صورت خروج با وضعیت غیر صفر، باعث پایین رفتن (down) نمونه‌های vrrp می‌شوند، یا اگر یک وزن (weight) مشخص شده باشد، آن وزن را به اولویت (priority) آن نمونه vrrp اضافه یا از آن کم می‌کنند. (c) اسکریپت‌های متفرقه بررسی‌کننده LVS (LVS checker misc scripts) که در صورت خروج با وضعیتی غیر صفر، باعث می‌شوند وضعیت سرور واقعی (real server) به صورت پایین (down) پیکربندی شود. به‌طور پیش‌فرض، اسکریپت‌ها توسط کاربر keepalived_script (در صورت وجود این کاربر) اجرا می‌شوند، وگرنه توسط root اجرا خواهند شد؛ اما برای هر اسکریپت می‌توان کاربر/گروهی (user/group) را که باید تحت آن اجرا شود مشخص کرد. اجرای اسکریپت‌ها با دسترسی‌های root پیامدهای امنیتی قابل توجهی دارد، به‌ویژه اگر خود اسکریپت‌ها توسط یک کاربر غیر root قابل تغییر یا جایگزینی باشند. در نتیجه، بررسی‌های امنیتی هنگام راه‌اندازی انجام می‌شود تا اطمینان حاصل شود که اگر اسکریپتی توسط root اجرا می‌شود، توسط یک کاربر غیر root قابل تغییر یا جایگزینی نباشد. همه اسکریپت‌ها باید به گونه‌ای نوشته شوند که با دریافت سیگنال SIGTERM خاتمه یابند. در صورتی که فرایند والد خاتمه یابد، یا اسکریپتی باشد که keepalived منتظر وضعیت خروج آن است و بیش از حد طول کشیده باشد، سیگنال SIGTERM به اسکریپت ارسال خواهد شد. .PP .SH "رشته‌های نقل‌قول‌شده (Quoted strings)" رشته‌های نقل‌قول‌شده بین نویسه‌های " یا ' مشخص می‌شوند و رشته‌ها با فاصله‌های سفید (whitespace) از یکدیگر جدا می‌شوند. در مثال‌های زیر نویسه‌های \' بخشی از رشته‌ها نیستند و نباید درج شوند: .nf .RS \'abcd" efg h jkl "mnop\' .RE .fi تبدیل به رشته تکی زیر خواهد شد: .nf .RS \'abcd efg h jkl mnop\' .RE در حالی که: .nf .RS \'abcd "efg h jkl" mnop\' .RE .fi تبدیل به این سه رشته خواهد شد: .nf .RS \'abcd\', \'efg h jkl\' and \'mnop\' .RE بدین معنی که نویسه‌های " و ' حذف شده و هرگونه فاصله سفید بین آن‌ها حفظ می‌شود. .PP رشته‌های نقل‌قول‌شده همچنین می‌توانند مانند شل شامل نویسه‌های گریز (escaped characters) باشند. موارد \\a، \\b، \\E، \\f، \\n، \\r، \\t، \\v، \\nnn و \\xXX (که در آن nnn حداکثر ۳ رقم هشت‌هشتی، و XX حداکثر دو رقم شانزده‌شانزدهی است) و \\cC (که نسخه کنترلی نویسه C را تولید می‌کند) همگی پشتیبانی می‌شوند. \\C برای هر نویسه دیگر C صرفاً به عنوان نسخه گریزخورده نویسه C در نظر گرفته می‌شود، بنابراین \\\\ یک نویسه \\ است و \\" یک نویسه " خواهد بود، اما رشته نقل‌قول‌شده را شروع یا تمام نمی‌کند. .PP برای مشخص کردن اسکریپت‌ها با پارامترها، فاصله‌های بدون نقل‌قول پارامترها را از هم جدا می‌کنند. اگر لازم باشد که یک پارامتر حاوی فاصله باشد، باید در نقل‌قول تکی (') محصور شود. برای نمونه .nf .RS $SG_NAME=SG1 $INST=low $USER=user notify_master "/etc/keepalived/notify_event.sh ' spaces\\\\x20f\\x69le ' '\\"s p a c e \\"' ${SG_NAME}.$INST master" $USER group .RE .fi اسکریپت notify_master با مسیر /etc/keepalived/notify_event.sh را مشخص می‌کند که با کاربر:گروه user:group و با پارامترهای زیر اجرا خواهد شد: .nf .RS \' spaces\\x20file \', \'"s p a c e "\', \'SG1.low\' and \'master\' .RE .fi .PP .SH "تجزیه‌کننده پیکربندی (CONFIGURATION PARSER)" به‌طور سنتی تجزیه‌کننده پرونده پیکربندی یکی از نقاط قوت keepalived نبوده است. تلاش‌های زیادی برای اصلاح این موضوع انجام شده است، حتی اگر این هدف اصلی پروژه نباشد. .SH "سلسله‌مراتب سطح بالا (TOP HIERARCHY)" .PP پرونده پیکربندی Keepalived حول مجموعه‌ای از بلوک‌های پیکربندی سازمان‌یافته است. هر بلوک بر روی ویژگی مشخصی از خانواده دیمن‌ها تمرکز و هدف‌گذاری دارد. این ویژگی‌ها عبارتند از: .PP \fBGLOBAL CONFIGURATION\fR .PP \fBBFD CONFIGURATION\fR .PP \fBVRRPD CONFIGURATION\fR .PP \fBLVS CONFIGURATION\fR .SH "پیکربندی عمومی (GLOBAL CONFIGURATION)" شامل زیربلوک‌های زیر است: \fBGlobal definitions، Linkbeat interfaces، Interface up/down transition delays، Static track groups، Static addresses، Static routes\fR و \fBStatic rules\fR .PP .SH "تعاریف عمومی (Global definitions)" .PP .nf # موارد زیر امکانات عمومی دیمن برای اجرای keepalived # در یک network namespace جداگانه هستند: # -- # تنظیم network namespace برای اجرا در آن. # شاخه /run/keepalived به عنوان یک نقطه اتصال unshared ایجاد خواهد شد، # برای نمونه برای پرونده‌های pid. # شناسه‌های syslog مقدار NAME_ را در انتهای نام شناسه خواهند داشت. # نکته: namespace هنگام بارگذاری مجدد پیکربندی (reload) قابل تغییر نیست. \fBnet_namespace \fRNAME # افزودن پیکربندی IPVS در net namespace مشخص‌شده. این گزینه امکان تفکیک آسان # ترافیک VIP روی یک namespace مشخص و نگه‌داشتن ترافیک healthchecks در # namespace دیگر را فراهم می‌کند. اگر NAME مشخص نشود، از namespace پیش‌فرض # استفاده خواهد شد. \fBnet_namespace_ipvs \fRNAME # قابلیت ipsets تا لینوکس 3.13 از network namespace آگاه نبود، بنابراین # در صورت اجرا با نسخه قدیمی‌تر هسته، در صورت استفاده از یک namespace و # مشخص نشدن vrrp_ipsets، استفاده از ipsets به‌طور پیش‌فرض غیرفعال است. # این گزینه مقدار پیش‌فرض را لغو کرده و اجازه می‌دهد ipsets با یک namespace # در هسته‌های قبل از 3.13 استفاده شود. \fBnamespace_with_ipsets\fR # اگر چندین نمونه از keepalived در همان namespace اجرا شوند، # این گزینه پرونده‌های pid را با NAME به عنوان بخشی از نام پرونده، # در /run/keepalived ایجاد می‌کند. # نکته: نام نمونه هنگام بارگذاری مجدد پیکربندی قابل تغییر نیست \fBinstance \fRNAME # ایجاد پرونده‌های pid در /run/keepalived \fBuse_pid_dir\fR # نظرسنجی (Poll) برای تشخیص خرابی پیوند رسانه با استفاده از رابط ETHTOOL، MII یا ioctl؛ # در غیر این صورت از رابط netlink استفاده می‌کند. \fBlinkbeat_use_polling\fR # مدت‌زمان به ثانیه برای فرایند اصلی جهت مهلت دادن به خروج فرایندهای فرزند هنگام خاتمه. # این مقدار ممکن است برای پیکربندی‌های بسیار بزرگ لازم باشد. # (پیش‌فرض: 5) \fBchild_wait_time \fRSECS یادداشت: تمامی فرایندها/اسکریپت‌های اجراشده توسط keepalived با سیگنال مرگ والد تنظیم‌شده روی SIGTERM اجرا می‌شوند. تمامی این فرایندها/اسکریپت‌ها یا نباید کنش مربوط به SIGTERM را تغییر دهند، یا باید اطمینان حاصل کنند که فرایند/اسکریپت پس از دریافت SIGTERM، احتمالاً پس از انجام هرگونه عملیات پاکسازی لازم، خاتمه می‌یابد. # بلوک پیکربندی تعاریف عمومی \fBglobal_defs \fR{ # به منظور اطمینان از اینکه همه فرایندها دقیقاً همان پیکربندی یکسان را می‌خوانند، # هنگام خواندن اولیه پیکربندی، به‌طور پیش‌فرض در یک پرونده مبتنی بر حافظه نوشته می‌شود # (یا در صورت عدم پشتیبانی از ()memfd_create در یک پرونده ناشناس در /tmp/). # اگر پیکربندی شما بسیار بزرگ است، ممکن است نخواهید نسخه کپی در حافظه نگه‌داری شود؛ # در این حالت، مشخص کردن \fItmp_config_directory\fR باعث می‌شود پیکربندی در یک پرونده ناشناس # روی سیستم‌فایلی که شاخه مشخص‌شده در آن قرار دارد نوشته شود، که باید توسط keepalived قابل نوشتن باشد. # این تنظیم در reload قابل تغییر نیست و باید تا حد امکان در ابتدای پیکربندی مشخص شود. \fBtmp_config_directory\fR DIRECTORY # گزینه config_save_dir باعث می‌شود keepalived وضعیت پیکربندی و پرونده‌های پیکربندی را # قبل و بعد از هر reload ذخیره کند. این برای مقاصد اشکال‌زدایی در صورت وجود مشکلات # مربوط به reloadهای مکرر استفاده می‌شود. شاخه در صورت عدم وجود ایجاد خواهد شد، # اما تمامی شاخه‌های والد باید از قبل وجود داشته باشند. \fBconfig_save_dir\fR DIRECTORY # تنظیم نام فرایندهای keepalived به مقادیر پیش‌فرض: # keepalived, keepalived_vrrp, keepalived_ipvs, keepalived_bfd \fBprocess_names\fR # تعیین نام‌های تکی فرایندها \fBprocess_name\fR NAME \fBvrrp_process_name\fR NAME \fBchecker_process_name\fR NAME \fBbfd_process_name\fR NAME # برنامه keepalived به‌طور پیش‌فرض مسیرهای اسکریپت را برای حذف پیوندهای نمادین (symlinks) حل می‌کند. # برای نگه‌داشتن symlinkها در نام مسیرها، use_symlink_paths را مشخص کنید. \fBuse_symlink_paths \fR[] # اسکریپت‌های startup و shutdown به ترتیب یک بار هنگام شروع keepalived قبل از اجرای هرگونه # فرایند فرزند، و هنگام توقف keepalived پس از خاتمه همه فرایندهای فرزند اجرا می‌شوند. # انگیزه اصلی افزودن این ویژگی این بود که گرچه keepalived می‌تواند پیکربندی IPVS را با استفاده از # نشانه‌های فایروال (firewall marks) راه‌اندازی کند، هیچ سازوکاری برای افزودن پیکربندی جهت تنظیم # نشانه‌های فایروال (یا حذف آن پس از آن) وجود نداشت. # این ویژگی همچنین می‌تواند برای راه‌اندازی ساختار iptables مورد نیاز در صورت استفاده از iptables # (گزینه vrrp_iptables زیر را ببینید)، تغییر تنظیمات رابط، یا هر کار دیگری که از طریق یک اسکریپت یا برنامه # قابل انجام باشد، استفاده شود. # تنها یک اسکریپت startup و یک اسکریپت shutdown می‌تواند مشخص شود. # مهلت‌های زمانی (بر حسب ثانیه، پیش‌فرض 10 ثانیه) زمان مجاز برای اجرای اسکریپت‌ها هستند؛ # اگر مهلت زمانی به پایان برسد، اسکریپت‌ها متوقف (kill) خواهند شد (این برای جلوگیری از معلق ماندن keepalived # در انتظار خاتمه اسکریپت‌ها است). \fBstartup_script\fR SCRIPT_NAME [username [groupname]] \fBstartup_script_timeout\fR SECONDS # بازه [1,1000] \fBshutdown_script\fR SCRIPT_NAME [username [groupname]] \fBshutdown_script_timeout\fR SECONDS # بازه [1,1000] # مجموعه‌ای از نشانی‌های ایمیل مقصد (:To) برای اطلاع‌رسانی. برای گنجاندن نام نمایشی، # کل نشانی ایمیل باید درون علامت نقل‌قول دوتایی (") قرار گیرد. \fBnotification_email \fR{ admin@example1.com "My admin " ... } # نشانی فرستنده ایمیل (from) که در سرآیند قرار خواهد گرفت (برای گنجاندن نام نمایشی # توضیح بالا را ببینید). # (پیش‌فرض: keepalived@local_host_name) \fBnotification_email_from \fRadmin@example.com # کارگزار دوردست SMTP مورد استفاده برای ارسال ایمیل اطلاع‌رسانی. # نشانی IP یا نام دامنه با شماره درگاه اختیاری. # (شماره درگاه پیش‌فرض: 25) \fBsmtp_server \fR127.0.0.1 [] # نام مورد استفاده در پیام‌های HELO. # (پیش‌فرض: نام میزبان محلی) \fBsmtp_helo_name \fR # مهلت زمانی اتصال به کارگزار SMTP بر حسب ثانیه. \fBsmtp_connect_timeout \fR30 # تنظیم وضعیت پیش‌فرض برای همه smtp_alertها \fBsmtp_alert \fR # تنظیم وضعیت پیش‌فرض برای smtp_alertهای vrrp \fBsmtp_alert_vrrp \fR # تنظیم وضعیت پیش‌فرض برای smtp_alertهای checker \fBsmtp_alert_checker \fR # ثبت هر بررسی ناموفق real server در syslog # (با این حال، هشدار SMTP تنها زمانی ارسال می‌شود که تمام بررسی‌های مجدد ناموفق باشند # و real server به وضعیت DOWN تغییر حالت دهد) \fBchecker_log_all_failures \fR # عدم ارسال هشدارهای smtp برای شرایط خطا (fault) \fBno_email_faults\fR # رشته شناسایی دستگاه (نیازی نیست نام میزبان باشد). # (پیش‌فرض: نام میزبان محلی) \fBrouter_id \fR # گروه چندپخشی (Multicast Group) مورد استفاده برای اعلان‌های IPv4 VRRP # پیش‌فرض آن نشانی چندپخشی VRRP تخصیص‌یافته توسط RFC5798 IANA یعنی 224.0.0.18 است # که معمولاً نمی‌خواهید آن را تغییر دهید. \fBvrrp_mcast_group4 \fR224.0.0.18 # گروه چندپخشی مورد استفاده برای اعلان‌های IPv6 VRRP # (پیش‌فرض: ff02::12) \fBvrrp_mcast_group6 \fRff02::12 # تنظیم رابط پیش‌فرض برای نشانی‌های ایستا. # (پیش‌فرض: eth0) \fBdefault_interface \fRp33p1.3 # دیمن همگام‌سازی همان‌طور که توسط کد هسته IPVS ارائه شده، در هر لحظه تنها از یک نمونه # دیمن master و یک نمونه دیمن backup برای همگام‌سازی جدول اتصالات IPVS پشتیبانی می‌کند. # برای جزئیات بیشتر درباره دیمن همگام‌سازی، صفحه راهنمای ipvsadm(8) را ببینید. # پارامترها عبارتند از رابط متصل‌شونده، و موارد اختیاری: # inst VRRP_INSTANCE (برای سازگاری با گذشته می‌توان inst را حذف کرد) # syncid (از 0 تا 255) برای lvs syncd، پیش‌فرض VRID نمونه vrrp است، # یا در صورت عدم وجود نمونه vrrp مقدار 0 # maxlen (از 1 تا 65507) حداکثر طول بسته (محدودیت mtu - 20 - 8 است) # port (از 1 تا 65535) شماره درگاه UDP مورد استفاده، پیش‌فرض 8848 # ttl (از 1 تا 255) # group - نشانی گروه چندپخشی (IPv4 یا IPv6)، پیش‌فرض 224.0.0.81 # اگر VRRP_INSTANCE مشخص نشود، تا زمانی که keepalived در حال اجرا است هر دو دیمن همگام‌سازی # master و backup اجرا خواهند شد، در غیر این صورت وضعیت master/backup دیمن همگام‌سازی # وضعیت نمونه vrrp مشخص‌شده را ردیابی می‌کند: اگر نمونه vrrp در وضعیت master باشد، # تنها دیمن همگام‌سازی master اجرا خواهد شد، و اگر نمونه vrrp در وضعیت master نباشد، # تنها دیمن همگام‌سازی backup اجرا خواهد شد. # نکته: maxlen، port، ttl و group تنها در لینوکس 4.3 یا جدیدتر در دسترس هستند. # برای جزئیات پارامترهای کنترل‌کننده IPVS و دیمن همگام‌سازی، مستندات سورس هسته # doc/Documentation/networking/ipvs-sysctl.txt را ببینید. # مسیر *proc/net/ip_vs/ جزئیاتی درباره وضعیت IPVS ارائه می‌دهد. \fBlvs_sync_daemon \fR [[inst] ] [id ] \e [maxlen ] [port ] [ttl ] [group ] # گزینه lvs_timeouts مهلت‌های زمانی ردیابی اتصال tcp، tcp_fin و udp را # بر حسب ثانیه مشخص می‌کند. حداقل یک مقدار باید مشخص شود؛ مشخص نکردن مقدار، آن را # نسبت به زمان شروع keepalived بدون تغییر باقی می‌گذارد. \fBlvs_timeouts\fR [tcp SECS] [tcpfin SECS] [udp SECS] # پاکسازی (flush) هرگونه پیکربندی موجود LVS در هنگام راه‌اندازی \fBlvs_flush\fR # پاکسازی پیکربندی باقی‌مانده LVS هنگام متوقف شدن (برای پیکربندی‌های بزرگ # این روش بسیار سریع‌تر از رویکرد پیش‌فرض حذف تک‌تک RSها و VSها است). # اگر VS مشخص شود، هر سرور مجازی تحت مدیریت keepalived بدون حذف صریح # real serverها حذف می‌شود (هسته آن‌ها را حذف خواهد کرد). \fBlvs_flush_on_stop [VS]\fR # تعداد پیام‌های ARP بی‌دلیل (gratuitous ARP) برای ارسال در یک نوبت پس از # انتقال به MASTER. # (پیش‌فرض: 5) \fBvrrp_garp_master_repeat \fR1 # تأخیر برای دسته دوم ARPهای بی‌دلیل پس از انتقال به MASTER. # بر حسب ثانیه، 0 برای عدم ارسال دسته دوم. # (پیش‌فرض: 5) \fBvrrp_garp_master_delay \fR10 # تعداد پیام‌های ARP بی‌دلیل برای ارسال در یک نوبت پس از # دریافت اعلان با اولویت پایین‌تر در وضعیت MASTER. # (پیش‌فرض: vrrp_garp_master_repeat) \fBvrrp_garp_lower_prio_repeat \fR1 # تأخیر برای دسته دوم ARPهای بی‌دلیل پس از دریافت اعلان با اولویت # پایین‌تر در وضعیت MASTER. # (پیش‌فرض: vrrp_garp_master_delay) \fBvrrp_garp_lower_prio_delay \fR10 # حداقل فاصله زمانی برای تازه‌سازی ARPهای بی‌دلیل در وضعیت MASTER. # بر حسب ثانیه (دقت بر حسب ثانیه). # (پیش‌فرض: 0 (بدون تازه‌سازی)) \fBvrrp_garp_master_refresh \fR60 # تعداد پیام‌های ARP بی‌دلیل برای ارسال در هر نوبت در وضعیت MASTER # (پیش‌فرض: 1) \fBvrrp_garp_master_refresh_repeat \fR2 # تأخیر بین پیام‌های ARP بی‌دلیل ارسالی روی یک رابط # اعشاری، بر حسب ثانیه (دقت میکروثانیه). # (پیش‌فرض: 0) \fBvrrp_garp_interval \fR0.001 # تأخیر بین پیام‌های اعلان همسایه ناخواسته (unsolicited NA) ارسالی روی یک رابط # اعشاری، بر حسب ثانیه (دقت میکروثانیه). # (پیش‌فرض: 0) \fBvrrp_gna_interval \fR0.000001 # به‌طور پیش‌فرض keepalived تعداد 5 پیام ARP/NA بی‌دلیل را در یک نوبت ارسال می‌کند، # و پس از انتقال به MASTER، بلوک دوم حاوی 5 پیام را 5 ثانیه بعد ارسال می‌نماید. # با سوئیچ‌های امروزی این کار غیرضروری است، بنابراین تنظیم vrrp_min_garp # باعث می‌شود تنها یک پیام ARP/NA ارسال شود، بدون تکرار 5 ثانیه بعد. \fBvrrp_min_garp \fR[] # گزینه زیر باعث ارسال دوره‌ای پیام‌های GARP/NA روی رابط‌های مربوط به VIPها/eVIPهایی می‌شود # که رابط نمونه VRRP نیستند، تا از به‌روز ماندن حافظه موقت MAC سوئیچ‌ها اطمینان حاصل شود # (مشخص‌شده بر حسب ثانیه). # بسیاری از سوئیچ‌ها دارای مهلت زمانی پیش‌فرض 300 ثانیه برای حافظه موقت هستند، بنابراین # نرخ تکرار garp معادل یک‌سوم آن منطقی خواهد بود. حداکثر مقدار مجاز 1 روز (86400 ثانیه) است؛ # به‌طور پیش‌فرض، فقط روی رابط‌های VMAC ارسال می‌شود؛ مشخص کردن \fBall\fR # باعث ارسال GARP/NA روی هر رابط مورد استفاده توسط نمونه VRRP خواهد شد. \fBvrrp_garp_extra_if [all] \fR100 # مقدار پیش‌فرض برای down_timer_adverts در vrrp. \fBvrrp_down_timer_adverts \fR[1:100] # در صورت دریافت اعلان با اولویت پایین‌تر، اعلان دیگری ارسال نشود. # این باعث پیروی از RFCهای قبل از RFC9568 می‌شود. # پیش‌فرض false است، مگر اینکه strict_mode تنظیم شده باشد. \fBvrrp_lower_prio_no_advert \fR[] # اگر master باشیم و اعلانی با اولویت بالاتر دریافت کنیم، قبل از انتقال به backup، # یک اعلان (که اولویت آن کمتر از master دیگر خواهد بود) ارسال می‌کنیم. بدین معنا که اگر master دیگر # گزینه garp_lower_priority_repeat را تنظیم کرده باشد، پیام‌های garp را مجدداً ارسال خواهد کرد. # این برای دور زدن مشکل وجود دو master هم‌زمان و مشاهده آخرین پیام‌های GARP از سوی ما است. \fBvrrp_higher_prio_send_advert \fR[] # تعیین نسخه پیش‌فرض VRRP برای استفاده # (پیش‌فرض: 2، اما نمونه‌های IPv6 از نسخه 3 استفاده خواهند کرد) \fBvrrp_version \fR<2 or 3> # توضیحات V3_checksum_as_V2 در vrrp_instance را ببینید \fBv3_checksum_as_v2\fR [] # برنامه keepalived از یک فایروال (nftables یا iptables) برای دو منظور استفاده می‌کند: # 1) پیاده‌سازی حالت no_accept # 2) متوقف کردن ارسال بسته‌های IGMP/MLD/Router-Solicit روی رابط‌های VMAC، # و انتقال پیام‌های IGMP/MLD به رابط زیرین (underlying). # اگر هر دو گزینه vrrp_iptables و vrrp_nftables مشخص شوند، keepalived از nftables استفاده می‌کند و نه iptables. # به همین ترتیب، اگر دستور iptables در حال تولید پیکربندی nftables باشد، یا هیچ دستور iptables نصب نشده باشد، # keepalived به جای iptables از nftables استفاده خواهد کرد. # اگر هیچ‌یک از vrrp_nftables یا vrrp_iptables مشخص نشده باشند اما VMACها در حال استفاده باشند # یا no_accept مشخص شده باشد، keepalived در صورت در دسترس بودن از nftables استفاده خواهد کرد. # استفاده از nftables به عنوان فایروال. # TABLENAME نباید وجود داشته باشد، و باید برای هر نمونه از keepalived # که در همان network namespace اجرا می‌شود متفاوت باشد. # نام جدول پیش‌فرض keepalived و اولویت 1- است. # برنامه keepalived زنجیره‌های پایه را در جدول ایجاد خواهد کرد. # گزینه counters به این معناست که شمارنده‌ها به قوانین اضافه می‌شوند (عمدتاً برای اهداف اشکال‌زدایی). # گزینه ifindex یعنی ایجاد مجموعه‌های IPv6 link local با استفاده از ifindex به جای ifnames. # این حالت پیش‌فرض است مگر اینکه vrrp_instance گزینه dont_track_primary را تنظیم کرده باشد. # راهکار جایگزین استفاده از نام رابط‌ها به عنوان بخشی از کلید مجموعه است، اما ابزار nft قبل از # نسخه v0.8.3 در این حالت نام رابط‌ها را به‌درستی خروجی نمی‌دهد. \fBnftables \fR[TABLENAME] \fBnftables_priority \fRPRIORITY \fBnftables_counters\fR \fBnftables_ifindex\fR # به همین ترتیب برای IPVS iptables - مورد استفاده برای تنظیم fwmarkها برای گروه‌های # سرور مجازی. برنامه keepalived برای هر گروه سرور مجازی یک fwmark اختصاص می‌دهد، به طوری که # تنها یک سرور مجازی برای هر گروه نیاز به پیکربندی در IPVS داشته باشد (با استفاده از fwmark)، # و از nftables برای تنظیم fwmark به ازای هر یک از ترکیب‌های نشانی/پروتکل/درگاه مشخص‌شده # سرور مجازی استفاده خواهد شد. # گزینه nftables_ipvs_start_fwmark اولین fwmark را برای استفاده keepalived # مشخص می‌کند (پیش‌فرض 1000). این مقدار برای هر گروه سرور مجازی بعدی افزایش می‌یابد. \fBnftables_ipvs \fR[TABLENAME] \fBnftables_ipvs_priority \fRPRIORITY \fBnftables_ipvs_start_fwmark \fRNUMBER # استفاده از iptables به عنوان فایروال. # نکته: لازم است زنجیره مشخص‌شده در پیکربندی iptables و/یا ip6tables وجود داشته باشد، # و این زنجیره از یک نقطه مناسب در پیکربندی iptables فراخوانی شود. # احتمالاً لازم خواهد بود که این فیلترگذاری پس از پذیرش هرگونه بسته ESTABLISHED,RELATED انجام شود، # زیرا ممکن است IPv4 نشانی VIP را به عنوان نشانی مبدأ برای اتصالات خروجی انتخاب کند. # نکته: اگرچه زنجیره‌های پیش‌فرض مورد استفاده INPUT و OUTPUT هستند، از آنجا که این‌ها تنها # زنجیره‌هایی هستند که همیشه وجود دارند، استفاده از این زنجیره‌ها ایمن یا منطقی نیست و # زنجیره‌های اختصاصی باید ایجاد شده و از نقاط مناسب در پیکربندی iptables فراخوانی شوند. # زنجیره‌های مورد استفاده برای keepalived نباید برای هیچ منظور دیگری استفاده شوند، و # نباید هیچ قانونی به جز قوانینی که keepalived مدیریت می‌کند روی آن‌ها پیکربندی شده باشد. # یک startup_script (بالا را ببینید) می‌تواند برای ایجاد زنجیره‌ها و افزودن قوانین جهت فراخوانی آن‌ها # استفاده شود. یک shutdown_script می‌تواند برای حذف پیکربندی iptables اضافه‌شده توسط startup_script استفاده شود. # نکته 2: در صورت استفاده از ipsets، قوانین VIP مربوط به iptables به انتهای زنجیره‌های مشخص‌شده # اضافه می‌شوند؛ در صورت عدم استفاده از ipsets، قوانین VIP در ابتدای زنجیره‌ها درج می‌شوند. # تمام قوانین IGMP همیشه به انتهای زنجیره‌ها اضافه می‌شوند. # (پیش‌فرض: INPUT) \fBvrrp_iptables \fRkeepalived # یا برای فیلترگذاری خروجی نیز # توجه: فیلترگذاری خروجی با IPv4 کار نخواهد کرد، زیرا VIP می‌تواند به عنوان نشانی مبدأ # برای یک اتصال خروجی انتخاب شود. در IPv6 این موضوع بعید است زیرا نشانی‌ها منسوخ (deprecated) هستند. \fBvrrp_iptables \fRkeepalived_in keepalived_out # یا برای استفاده از زنجیره‌های پیش‌فرض (INPUT و OUTPUT) \fBvrrp_iptables\fR # برنامه Keepalived ممکن است امکان استفاده از ipsets در کنار iptables را داشته باشد. # در این صورت، نام‌های ipset می‌توانند مشخص شوند، پیش‌فرض‌ها به شرح زیر هستند. # اگر نامی مشخص نشود، از ipsets استفاده نخواهد شد، در غیر این صورت هر نام حذف‌شده # با افزودن "if_" و/یا "6" و igmp/_mld/_nd_ به نام‌های مشخص‌شده قبلی ساخته خواهد شد. \fBvrrp_ipsets \fR[keepalived [keepalived6 [keepalived_if6 [keepalived_igmp [keepalived_mld [keepalived_vmac_nd]]]]]] # یک راهکار جایگزین برای انتقال پیام‌های IGMP از VMACها به رابط‌های والد آن‌ها، # غیرفعال کردن کامل آن‌ها در هسته با تنظیم igmp_link_local_mcast_reports به false است. # این کار پیام‌های IGMP join و غیره را برای 224.0.0.0/24 متوقف می‌کند، زیرا آن‌ها باید # همیشه به همه رابط‌ها هدایت (forward) شوند (RFC4541 را ببینید). # این قابلیت از لینوکس 4.3 به بعد در دسترس است. disable_local_igmp # گزینه زیر بررسی این موضوع را فعال می‌کند که در حالت unicast، نشانی مبدأ # یک بسته VRRP یکی از unicast peerهای ما باشد. \fBvrrp_check_unicast_src\fR # بررسی تمام نشانی‌ها در یک اعلان دریافتی VRRP می‌تواند زمان‌بر باشد. # تنظیم این پرچم به این معنی است که اگر اعلان از همان مسیریاب master که اعلان قبلی # را فرستاده بود دریافت شده باشد، این بررسی انجام نخواهد شد. # (پیش‌فرض: نادیده نگرفتن) \fBvrrp_skip_check_adv_addr\fR # اعمال انطباق دقیق با پروتکل VRRP. این مورد در حال حاضر شامل اعمال موارد زیر است. # لطفاً توجه داشته باشید که در صورت یافتن موارد دیگر در آینده، ممکن است بررسی‌های دیگری نیز اضافه شوند: # تعداد 0 VIP مجاز نیست # unicast peerها مجاز نیستند # نشانی‌های IPv6 در نسخه 2 VRRP مجاز نیستند # اولین VIP در IPv6 باید link local باشد # وضعیت MASTER تنها و تنها زمانی قابل پیکربندی است که اولویت 255 باشد # احراز هویت پشتیبانی نمی‌شود # تأخیر Preempt پشتیبانی نمی‌شود # حالت Accept برای VRRPv2 قابل تنظیم نیست # اگر accept/no accept مشخص نشده باشد، در صورت اولویت 255 مقدار accept تنظیم شده # و در غیر این صورت پاک می‌شود # تکرارهای ARP بی‌دلیل نمی‌توانند فعال شوند # امکان پاک کردن lower_prio_no_advert وجود ندارد # امکان تنظیم higher_prio_send_advert وجود ندارد # امکان استفاده از vmac_xmit_base وجود ندارد # عدم وجود VIP در VRRPv3 مجاز نیست # اگر اولویت 255 باشد، اعلان‌های دریافتی نادیده گرفته می‌شوند \fBvrrp_strict\fR # ارسال اعلان‌های اولویت نمونه vrrp روی FIFOهای notify. \fBvrrp_notify_priority_changes\fR # گزینه‌های زیر زمانی می‌توانند استفاده شوند که فرایندهای vrrp، checker یا bfd # با پایان مهلت زمانی (timeout) مواجه می‌شوند. این موضوع را می‌توان از تبدیل شدن # یک نمونه vrrp پشتیبان (backup) به master مشاهده کرد، حتی زمانی که master همچنان در حال اجرا است، # زیرا سیستم master یا backup برای پردازش بسته‌های vrrp بیش از حد مشغول است. # -- # برنامه keepalived می‌تواند در صورتی که تشخیص دهد به اندازه کافی پس از سررسید زمان‌سنج # اجرا نشده است، اولویت خود را افزایش دهد؛ ابتدا با تغییر به زمان‌بندی realtime، # و اگر این کافی نباشد، هر بار که تأخیر بیشتری در اجرا تشخیص دهد، اولویت realtime خود را یکی افزایش می‌دهد. # اگر رویدادی پیش آید که realtime # زمان‌بندی فعال باشد، RLIMIT_RTTIME با استفاده از مقادیر # {bfd,checker,vrrp}_rlimit_rttime (زیر را ببینید) تنظیم خواهد شد. ممکن است لازم باشد # این مقادیر برای پردازنده‌های کُندتر افزایش یابند. # -- # برای محدود کردن بیشینه افزایش اولویت خودکار، موارد زیر را مشخص کنید # (0 از افزایش خودکار اولویت استفاده نمی‌کند و پیش‌فرض است. -1 پیام # هشدار هنگام راه‌اندازی را غیرفعال می‌کند). حذف اولویت، بیشینه مقدار را تنظیم می‌کند. \fBmax_auto_priority\fR [<-1 to 99>] # 99 در واقع همان sched_get_priority_max(SCHED_RR) است # کمینه تأخیر به میکروثانیه پس از انقضای تایمر پیش از آنکه keepalived # زمان‌بندی شود، که پس از آن اولویت فرایند به‌طور خودکار افزایش می‌یابد # (پیش‌فرض 1000000 میکروثانیه (۱ ثانیه)، بیشینه 10000000 (۱۰ ثانیه) است) \fBmin_auto_priority_delay\fR # تنظیم اولویت فرایند فرزند vrrp (مقادیر منفی اولویت را افزایش می‌دهند) \fBvrrp_priority \fR<-20 to 19> # تنظیم اولویت فرایند فرزند checker \fBchecker_priority \fR<-20 to 19> # تنظیم اولویت فرایند فرزند BFD \fBbfd_priority \fR<-20 to 19> # غیرقابل swap کردن فرایند فرزند vrrp در حافظه \fBvrrp_no_swap\fR # غیرقابل swap کردن فرایند فرزند checker در حافظه \fBchecker_no_swap\fR # غیرقابل swap کردن فرایند فرزند BFD در حافظه \fBbfd_no_swap\fR # از گزینه‌های زیر می‌توان برای اجبار فرایندهای vrrp، checker و bfd # به اجرا روی یک مجموعه محدود از پردازنده‌ها استفاده کرد. # می‌توانید فرایندها را به یک CPU واحد مقید کنید یا مجموعه‌ای از # CPUها را تعریف نمایید. در حالت آخر، هسته لینوکس در طول زمان‌بندی # به همان مجموعه CPU محدود خواهد شد. اجبار به وابستگی فرایند به یک CPU واحد # می‌تواند کارایی را در سیستم‌های تحت بار سنگین افزایش دهد. # مقدار INTEGER پس از کلیدواژه پیکربندی، نشان‌دهنده cpu_id است # همان‌گونه که در پرونده /proc/cpuinfo در خط "processor:" نمایش داده می‌شود # -- # تنظیم وابستگی پردازنده (CPU Affinity) برای فرایند فرزند vrrp \fBvrrp_cpu_affinity\fR []...[] # تنظیم وابستگی پردازنده (CPU Affinity) برای فرایند فرزند checker \fBchecker_cpu_affinity\fR []...[] # تنظیم وابستگی پردازنده (CPU Affinity) برای فرایند فرزند bfd \fBbfd_cpu_affinity\fR []...[] # تنظیم فرایند فرزند vrrp برای استفاده از زمان‌بندی بی‌درنگ (real-time) # در اولویت مشخص‌شده \fBvrrp_rt_priority \fR<1..99> # تنظیم فرایند فرزند checker برای استفاده از زمان‌بندی بی‌درنگ (real-time) # در اولویت مشخص‌شده \fBchecker_rt_priority \fR<1..99> # تنظیم فرایند فرزند BFD برای استفاده از زمان‌بندی بی‌درنگ (real-time) # در اولویت مشخص‌شده \fBbfd_rt_priority \fR<1..99> # تنظیم محدودیت زمان CPU بین فراخوان‌های سیستمی مسدودکننده، # به میکروثانیه # (پیش‌فرض: 10000) \fBvrrp_rlimit_rttime \fR>=2 \fBchecker_rlimit_rttime \fR>=2 \fBbfd_rlimit_rttime \fR>=2 # اگر Keepalived با پشتیبانی از SNMP کامپایل شده باشد، کلیدواژه‌های # زیر در دسترس خواهند بود. # نکته: پشتیبانی از Keepalived، checker و RFC را می‌توان به‌صورت جداگانه # فعال/غیرفعال کرد # -- # مشخص کردن سوکت مورد استفاده برای اتصال به عامل اصلی (master agent) پروتکل SNMP # (برای جزئیات بیشتر به ماژول مبدأ keepalived/vrrp/vrrp_snmp.c مراجعه کنید) # (پیش‌فرض: unix:/var/agentx/master) \fBsnmp_socket \fRudp:1.2.3.4:705 # فعال‌سازی پردازش SNMP برای عنصر vrrp در KEEPALIVED MIB \fBenable_snmp_vrrp\fR # فعال‌سازی پردازش SNMP برای عنصر checker در KEEPALIVED MIB \fBenable_snmp_checker\fR # فعال‌سازی پردازش SNMP برای MIBهای VRRP مربوط به RFC2787 و RFC6527 \fBenable_snmp_rfc\fR # فعال‌سازی پردازش SNMP برای MIB مربوط به RFC2787 VRRP \fBenable_snmp_rfcv2\fR # فعال‌سازی پردازش SNMP برای MIB مربوط به RFC6527 VRRP \fBenable_snmp_rfcv3\fR # فعال‌سازی تله‌های (traps) پروتکل SNMP \fBenable_traps\fR # هنگام ارسال درخواست‌های SNMP، فرایند checker تنها در صورتی آمار سرور # مجازی و واقعی را از هسته به‌روزرسانی می‌کند که آخرین زمان خواندن آمار # برای آن سرور مجازی، بیش از این بازه پیکربندی‌شده (به ثانیه) باشد. بازه # پیش‌فرض ۵ ثانیه است، و دامنه معتبر از 0.001 (۱ میلی‌ثانیه) تا ۳۰ ثانیه می‌باشد. \fBsnmp_vs_stats_update_interval\fR # مشابه snmp_vs_stats_update_interval اما برای سرورهای واقعی. آمار مربوط به # سرورهای واقعی تنها در صورتی خوانده می‌شود که یک درخواست SNMP برای آمار سرور # واقعی وجود داشته باشد. \fBsnmp_rs_stats_update_interval\fR # اگر Keepalived با پشتیبانی از DBus کامپایل شده باشد، کلیدواژه‌های # زیر در دسترس خواهند بود. # -- # فعال‌سازی رابط DBus \fBenable_dbus\fR # نام سرویس DBus # زمانی کاربرد دارد که بخواهید چندین فرایند keepalived را با DBus فعال اجرا کنید # (پیش‌فرض: org.keepalived.Vrrp1) \fBdbus_service_name \fRSERVICE_NAME # رشته مورد استفاده برای مسیر DBus هنگامی که نمونه VRRP هیچ رابطی پیکربندی نکرده باشد # زمانی کاربرد دارد که سیستم شما رابطی به نام "none" داشته باشد! # (پیش‌فرض: "none") \fBdbus_no_interface_name \fRNAME # مشخص کردن username/groupname پیش‌فرض برای اجرای اسکریپت‌ها تحت آن. # اگر این گزینه مشخص نشود، کاربر به keepalived_script پیش‌فرض می‌شود # در صورتی که آن کاربر وجود داشته باشد، در غیر این صورت بر اساس uid/gid که keepalived تحت آن اجرا می‌شود. # اگر groupname مشخص نشود، به گروه پیش‌فرض آن کاربر تنظیم می‌شود. \fBscript_user \fRusername [groupname] # عدم اجرای اسکریپت‌های پیکربندی‌شده برای اجرا تحت root در صورتی که هر بخشی از مسیر # توسط کاربری غیر از root قابل نوشتن باشد. همچنین اجبار می‌کند که script_user پیش‌فرض # همان keepalived_script باشد، و به کاربری که keepalived تحت آن در حال اجراست (معمولاً root) # تغییر نیابد. \fBenable_script_security\fR # به جای استفاده از اسکریپت‌های notify، مشخص کردن یک fifo امکان پردازش # کارآمدتر رویدادهای notify را فراهم کرده و تضمین می‌کند که آنها # با توالی صحیح تحویل داده خواهند شد. # نکته: نام‌های FIFO همگی باید یکتا باشند # -- # FIFO برای نوشتن رویدادهای notify در آن # برای قالب خروجی vrrp_notify_fifo و lvs_notify_fifo را ببینید # برای جزئیات بیشتر، توضیحات زیر بخش vrrp_sync_group را ببینید. # برای نمونه کاربرد doc/samples/sample_notify_fifo.sh را ببینید. \fBnotify_fifo \fRFIFO_NAME [username [groupname]] # اسکریپتی که توسط keepalived برای پردازش رویدادهای notify اجرا می‌شود # نام FIFO به عنوان آخرین پارامتر به اسکریپت ارسال خواهد شد \fBnotify_fifo_script \fRSTRING|QUOTED-STRING [username [groupname]] # FIFO برای نوشتن رویدادهای notify مربوط به vrrp در آن. # رشته نوشته‌شده خطی به این شکل خواهد بود: INSTANCE "VI_1" MASTER 100 # و با یک نویسه خط جدید خاتمه می‌یابد. # برای جزئیات بیشتر خروجی، توضیحات زیر vrrp_sync_group # و doc/samples/sample_notify_fifo.sh را برای نمونه کاربرد ببینید. \fBvrrp_notify_fifo \fRFIFO_NAME [username [groupname]] # اسکریپتی که توسط keepalived برای پردازش رویدادهای notify مربوط به vrrp اجرا می‌شود # نام FIFO به عنوان آخرین پارامتر به اسکریپت ارسال خواهد شد \fBvrrp_notify_fifo_script \fRSTRING|QUOTED-STRING [username [groupname]] # FIFO برای نوشتن رویدادهای notify مربوط به healthchecker در آن # رشته نوشته‌شده خطی به این شکل خواهد بود: # VS [192.168.201.15]:tcp:80 {UP|DOWN} # RS [1.2.3.4]:tcp:80 [192.168.201.15]:tcp:80 {UP|DOWN} # و با یک نویسه خط جدید خاتمه می‌یابد. \fBlvs_notify_fifo \fRFIFO_NAME [username [groupname]] # اسکریپتی که توسط keepalived برای پردازش رویدادهای notify مربوط به healthchecker اجرا می‌شود # نام FIFO به عنوان آخرین پارامتر به اسکریپت ارسال خواهد شد \fBlvs_notify_fifo_script \fRSTRING|QUOTED-STRING [username [groupname]] # به‌طور پیش‌فرض، هنگام بارگذاری مجدد (reload) keepalived، وضعیت‌های نمونه vrrp و گروه همگام‌سازی # در FIFOهای مربوطه نوشته نمی‌شوند. تنظیم این گزینه باعث می‌شود که هنگام # بارگذاری مجدد keepalived، وضعیت‌ها به FIFO(ها) ارسال شوند. \fBfifo_write_vrrp_states_on_reload\fR # اجازه به پیکربندی برای شامل شدن رابط‌هایی که هنگام راه‌اندازی وجود ندارند. # این قابلیت به keepalived اجازه می‌دهد با رابط‌هایی که ممکن است حذف و بازیابی شوند # کار کند و همچنین مسیرها و قوانین مجازی و ایستا را روی رابط‌های VMAC ممکن می‌سازد. # allow_if_changes اجازه می‌دهد یک رابط حذف شده و با نوع یا رابط زیربنایی متفاوتی # بازسازی شود، مثلاً تغییر از vlan به macvlan یا تغییر macvlan از eth1 به eth2. این گزینه # در صورت تنظیم نشدن allow_if_changes عمدتاً برای گزارش خطاهای تکراری VRID در راه‌اندازی استفاده می‌شود. \fBdynamic_interfaces [allow_if_changes]\fR # گزینه‌های زیر تنها برای پیکربندی‌های بزرگ لازم هستند، جایی که یا # keepalived تعداد زیادی رابط ایجاد می‌کند، یا سیستم تعداد زیادی # رابط دارد. این گزینه‌ها تنها در صورتی نیاز به استفاده دارند که پیام‌های # "Netlink: Receive buffer overrun" در گزارش‌های سیستم ثبت شوند. # اگر اندازه بافر مورد نیاز از مقدار موجود در /proc/sys/net/core/rmem_max فراتر رود # لازم است گزینه force مربوطه تنظیم شود. # -- # تنظیم اندازه بافر دریافت netlink. این گزینه برای # پیکربندی‌های بسیار بزرگ مفید است که در آن تعداد زیادی رابط وجود دارد و # خواندن اولیه رابط‌ها در سیستم باعث سرریز بافر netlink می‌شود. \fBvrrp_netlink_cmd_rcv_bufs \fRBYTES \fBvrrp_netlink_cmd_rcv_bufs_force \fR \fBvrrp_netlink_monitor_rcv_bufs \fRBYTES \fBvrrp_netlink_monitor_rcv_bufs_force \fR # اندازه‌های بافر سوکت دستور و پایش netlink مربوط به vrrp، سوکت دستور # و پایش checker و بافر پایش فرایند می‌توانند به‌طور مستقل تنظیم شوند. # پرچم force به معنای استفاده از SO_RCVBUFFORCE است، تا اندازه بافر # بتواند از /proc/sys/net/core/rmem_max فراتر رود. \fBlvs_netlink_cmd_rcv_bufs \fRBYTES \fBlvs_netlink_cmd_rcv_bufs_force \fR \fBlvs_netlink_monitor_rcv_bufs \fRBYTES \fBlvs_netlink_monitor_rcv_bufs_force \fR # به عنوان راهنما برای process_monitor_rcv_bufs در شرایطی که ۱۴۰۰ فرایند به‌طور همزمان # خاتمه می‌یابند، مقدار 212992 (پیش‌فرض در برخی سیستم‌ها) ناکافی است، در حالی که # مقدار 500000 کافی خواهد بود. \fBprocess_monitor_rcv_bufs \fRBYTES \fBprocess_monitor_rcv_bufs_force \fR # هنگام باز شدن یک سوکت، هسته بیشینه اندازه بافر rx برای سوکت را روی # مقدار /proc/sys/net/core/rmem_default پیکربندی می‌کند. در برخی سیستم‌ها این مقدار # می‌تواند بسیار بزرگ باشد، و حتی به‌طور کلی می‌تواند بسیار بزرگتر از حد نیاز باشد. # این موضوع تا زمانی که keepalived تمام داده‌های صف‌بندی‌شده را از سوکت‌هایش می‌خواند # مشکلی ایجاد نمی‌کند، اما اگر rmem_default به اندازه کافی بزرگ تنظیم شده باشد و بنا به # دلایلی keepalived خواندن را متوقف کند، می‌تواند تمام حافظه سیستم را مصرف نماید. # گزینه vrrp_rx_bufs_policy امکان پیکربندی اندازه بافرهای rx را هنگام باز شدن # سوکت‌ها فراهم می‌سازد. اگر خط‌مشی روی MTU باشد، اندازه بافر rx روی حاصل‌ضرب # مقدار MTU رابط * vrrp_rx_bufs_multiplier برای هر نمونه vrrp استفاده‌کننده # از سوکت تنظیم می‌شود. به همین ترتیب، اگر خط‌مشی روی ADVERT باشد، برابر با مجموع # اندازه بسته advert هر نمونه vrrp * multiplier خواهد بود. # (پیش‌فرض: استفاده از پیش‌فرض سیستم) \fBvrrp_rx_bufs_policy \fR[MTU|ADVERT|NUMBER] # (پیش‌فرض: 3) \fBvrrp_rx_bufs_multiplier \fRNUMBER # ارسال اعلان‌ها هنگام راه‌اندازی برای سرورهای واقعی که در حال بالا آمدن هستند \fBrs_init_notifies\fR # عدم ارسال ایمیل در هر بار تغییر وضعیت بررسی‌کننده (checker) سرور واقعی؛ # تنها هنگام اضافه یا حذف شدن یک سرور واقعی ایمیل ارسال شود \fBno_checker_emails\fR # مقدار umask برای استفاده هنگام ایجاد پرونده‌ها. عدد را می‌توان به صورت هگزادسیمال، هشت‌هشتی (octal) # یا ده‌دهی (decimal) مشخص کرد. BITS به صورت I{R|W|X}{USR|GRP|OTH}، مثلاً IRGRP هستند که با '|' جدا می‌شوند. # همچنین می‌توان IRWX{U|G|O} را مشخص کرد. # مقدار پیش‌فرض umask برابر IXUSR | IRWXG | IRWXO است. این گزینه نمی‌تواند گزینه # خط فرمان را لغو کند. \fBumask \fR[NUMBER|BITS] # در برخی سیستم‌ها هنگام ایجاد رابط‌های bond، ممکن است آنها شروع به عبور ترافیک کنند # و سپس وقفه‌ای چند ثانیه‌ای رخ دهد که عبور ترافیک ورودی متوقف می‌شود. این می‌تواند # به این معنی باشد که اگر keepalived در زمان بوت راه‌اندازی شود، یعنی همزمان با ایجاد # رابط‌های bond، اعلان‌ها (adverts) را دریافت نکرده و با وجود نمونه‌ای با اولویت بالاتر # که اعلان ارسال می‌کند، به master تبدیل شود. # این گزینه یک تأخیر به ثانیه پیش از راه‌اندازی نمونه‌های vrrp پس از شروع keepalived مشخص می‌کند. # همچنین \fBvrrp_delay_after_boot\fR در زیر را ببینید. \fBvrrp_startup_delay \fR5.5 # احتمالاً یک جایگزین بهتر برای \fBvrrp_startup_delay \fR استفاده از # \fBvrrp_delay_after_boot\fB است. این امر تضمین می‌کند که راه‌اندازی نمونه‌های vrrp # حداقل تا تعداد ثانیه‌های مشخص‌شده پس از بوت سیستم به تأخیر بیفتد. بنابراین، # هنگامی که keepalived در زمان بوت راه‌اندازی می‌شود، می‌تواند شروع نمونه‌های VRRP را # تا سپری شدن زمان مشخص‌شده به تأخیر بیندازد، اما اگر keepalived متوقف و دوباره راه‌اندازی شود # هیچ تأخیری نخواهد داشت. keepalived از تأخیر طولانی‌تر بین # \fBvrrp_startup_delay\fR و \fBvrrp_delay_after_boot\fR استفاده خواهد کرد. \fBvrrp_delay_after_boot \fR15.23 # مورد زیر باعث ثبت گزارش دریافت اعلان‌های VRRP برای VRIDهایی می‌شود که روی رابطی # که اعلان از آن دریافت شده پیکربندی نشده‌اند. \fBlog_unknown_vrids\fR # مشخص کردن پیشوند برای نام‌های تولیدشده VMAC (پیش‌فرض "vrrp") \fBvmac_prefix \fRSTRING # مشخص کردن پیشوند برای نام‌های تولیدشده VMAC برای VIPهایی که از VMAC استفاده می‌کنند اما روی # رابط نمونه VRRP نیستند (مقدار پیش‌فرض vmac_prefix) \fBvmac_addr_prefix \fRSTRING # مشخص کردن مقدار بذر تصادفی (random seed) برای ${_RANDOM} جهت تکرارپذیر کردن پیکربندی‌ها (پیش‌فرض # استفاده از بذری بر پایه زمان است، تا هر بار پیکربندی متفاوتی # تولید شود). \fBrandom_seed \fRUNSIGNED_INT # اگر تلاش برای بارگذاری مجدد پیکربندی با یک پرونده پیکربندی به‌روزشده دارای خطا # انجام شود، ممکن است keepalived متوقف شده و احتمالاً وارد یک حلقه بی‌پایان راه‌اندازی مجدد # و خاتمه شود. اگر reload_check_config تنظیم شده باشد، keepalived پیش از آغاز بارگذاری مجدد، # تلاش می‌کند پیکربندی را اعتبارسنجی کند و تنها در صورتی بارگذاری مجدد را آغاز می‌کند # که پیکربندی معتبر باشد. \fBreload_check_config \fR[LOG_FILE] # برخورد با هر پرونده include یافت‌نشده به عنوان خطا. OPTIONS می‌تواند هر ترکیبی از موارد زیر باشد: # readable - خطا در صورتی که مورد منطبق، یک پرونده قابل خواندن نباشد # match - خطا در صورتی که هیچ پرونده‌ای منطبق نشود (مگر اینکه نویسه عام مشخص شده باشد) # wildcard_match - خطا در صورتی که هیچ پرونده‌ای منطبق نشود (حتی اگر نویسه عام مشخص شده باشد) # brace_match - خطا در صورتی که بسط آکولاد (brace expansion) با پرونده‌ای منطبق نشود # نکته: match، wildcard_match و brace_match شامل بررسی readable نیز هستند. # تنظیم include_check هنگام باز شدن یک پرونده include جدید ذخیره شده و پس از بسته شدن پرونده # بازیابی می‌شود. این بدان معناست که تنظیم include_check هنگام خواندن یک پرونده نمی‌تواند توسط # پرونده includeشده بعدی تغییر کند. برای تغییر این تنظیم برای تمامی پرونده‌های includeشده، # include_check باید در ابتدای پرونده پیکربندی مشخص‌شده در خط فرمان (پیش‌فرض /etc/keepalived/keepalived.conf) تنظیم شود. # نکته ۲: اگر تابع glob() در libc از GLOB_ALTDIRFUNC پشتیبانی نکند (مانند Musl libc در # Alpine Linux و غیره)، تنها گزینه‌های readable و wildcard_match از موارد بالا کار خواهند کرد. # امکان افزودن یا حذف تنظیمات فردی وجود دارد؛ '+' به معنای افزودن بررسی‌های بعدی و # '-' به معنای حذف بررسی‌های بعدی است. به عنوان مثال: # \fIinclude_check +match -wildcard_match\fR # الزام وجود یک پرونده منطبق را اضافه کرده و الزام تطابق‌های wildcard را حذف می‌کند. # اگر هیچ گزینه‌ای مشخص نشود، معادل با مشخص کردن تمام گزینه‌ها است. \fBinclude_check \fR[OPTIONS] # reload_time_file امکان زمان‌بندی بارگذاری مجدد keepalived در آینده را فراهم می‌سازد. این قابلیت # به‌ویژه زمانی مفید است که یک سرور اصلی (master) keepalived و یک یا چند نمونه پشتیبان (backup) وجود دارند # و پیکربندی جدید با پیکربندی قبلی ناسازگار است، مثلاً افزودن یا حذف VIPها که باعث رد شدن اعلان‌ها می‌شود. # می‌توان تمامی نمونه‌ها را برای بارگذاری مجدد در یک زمان مشخص زمان‌بندی کرد، و بدین ترتیب تضمین نمود که # هیچ اعلان نامنطبقی توسط نمونه‌های پشتیبان دریافت نمی‌شود. # پیکربندی پرونده‌ای را مشخص می‌کند که keepalived آن را پایش خواهد کرد. خط اول # پرونده باید شامل زمان یا تاریخ/زمان معتبر دقیقاً در قالب‌های مشخص‌شده زیر باشد. # هنگامی که keepalived راه‌اندازی می‌شود، در صورت وجود پرونده آن را می‌خواند و یک بارگذاری مجدد را # در زمان مشخص‌شده زمان‌بندی می‌کند. اگر پرونده وجود نداشته باشد، پس از ایجاد بعدی آن # یک بارگذاری مجدد زمان‌بندی خواهد شد. اگر پرونده به‌روزرسانی شود، زمان بارگذاری مجدد نیز بر همان اساس # اصلاح می‌شود. در صورت حذف پرونده، بارگذاری مجدد لغو می‌گردد. # به‌طور معمول با رخ دادن بارگذاری مجدد، پرونده مشخص‌شده حذف می‌شود، زیرا بارگذاری مجدد # انجام شده است؛ اگر پرونده شامل تاریخ بود، بارگذاری مجدد در گذشته قرار می‌گیرد و نادیده گرفته می‌شود. # با این حال، اگر تاریخی وجود نداشته باشد، در صورت خواندن مجدد پرونده پس از بارگذاری مجدد، # یک بارگذاری مجدد برای ۲۴ ساعت بعد زمان‌بندی خواهد شد. به منظور جلوگیری از این امر، # پرونده به‌طور پیش‌فرض حذف (unlink) می‌شود. اگر reload_repeat مشخص شده باشد، پرونده # حذف نمی‌شود، و اگر پرونده تنها شامل زمان بدون تاریخ باشد، keepalived هر روز در همان زمان # به بارگذاری مجدد ادامه می‌دهد تا زمانی که پرونده حذف یا اصلاح شود. # اگر دایرکتوری حاوی پرونده در زمان راه‌اندازی/بارگذاری مجدد وجود نداشته باشد، یا اگر دایرکتوری # حذف یا تغییر نام داده شود، هیچ بارگذاری مجدد زمان‌بندی‌شده‌ای در آینده رخ نخواهد داد تا زمانی که # یک بارگذاری مجدد دستی (SIGHUP) انجام شود یا keepalived دوباره راه‌اندازی گردد. # قالب‌های مجاز برای ورودی در پرونده زمان‌سنج دقیقاً عبارتند از: # HH:MM:SS # YY-MM-DD HH:MM:SS # YYYY-MM-DD HH:MM:SS # هرکدام با یک 'Z' اختیاری در انتها. # نباید هیچ فاصله خالی (whitespace) در ابتدا یا انتها وجود داشته باشد، و تنها یک فاصله بین تاریخ # و زمان مجاز است. # اگر یک 'Z' در انتهای زمان وجود داشته باشد، زمان به عنوان UTC پردازش می‌شود، در غیر این صورت # زمان همان زمان محلی (localtime) برای محیطی است که keepalived در آن اجرا می‌شود. اگر سیستم‌هایی # که بارگذاری مجدد می‌شوند در منطقه‌های زمانی متفاوتی قرار دارند، احتمالاً استفاده از UTC امن‌تر است. # در صورت استفاده از زمان محلی با ساعت تابستانی (daylight savings)، توجه داشته باشید که برخی زمان‌ها وجود ندارند # و برخی زمان‌ها تکرار می‌شوند و بنابراین مبهم هستند. \fBreload_time_file\fR ABSOLUTE-PATHNAME-OF-FILE \fBreload_repeat\fR # برخی کاربران مرتباً پیکربندی‌های خود را به‌روزرسانی کرده و keepalived را مجدداً بارگذاری می‌کنند. reload_file # مکانیزمی فراهم می‌کند که به فرایندهای به‌روزرسانی پیکربندی اجازه می‌دهد پرونده‌های پیکربندی را # در حین خوانده شدن توسط keepalived به‌روزرسانی نکنند. # پرونده reload پیش از شروع خواندن پرونده‌های پیکربندی توسط keepalived ایجاد می‌شود، # مگر اینکه پرونده از قبل وجود داشته باشد. اگر پرونده وجود داشته باشد، خالی (truncated) خواهد شد. هنگامی که # keepalived خواندن پرونده‌ها را به پایان برساند، پرونده reload را حذف خواهد کرد. # اگر reload_file بدون نام پرونده مشخص شود، نام پرونده پیش‌فرض keepalived.reload # در دایرکتوری PID استفاده خواهد شد. # بهترین روش برای استفاده از پرونده reload این است که فرایند به‌روزرسانی پیکربندی، پرونده reload را # پیش از ارسال سیگنال reload به keepalived لمس (touch) کند، و سپس منتظر بماند تا پرونده # حذف شود، که نشان می‌دهد خواندن پرونده‌های پیکربندی توسط keepalived به پایان رسیده است. # هنگامی که keepalived شروع به خواندن پرونده‌های پیکربندی می‌کند، از آنجا که پرونده reload را خالی می‌کند، # اگر فرایند به‌روزرسانی پرونده reload_file را با اندازه غیرصفر ایجاد کرده باشد، می‌تواند شروع بارگذاری مجدد # را از صفر شدن طول reload_file تشخیص دهد. \fBreload_file\fR [ABSOLUTE-PATHNAME-OF-FILE] # ارسال SIGUSR1 به keepalived باعث می‌شود ساختارهای داده خود را برای # اهداف اشکال‌زدایی تخلیه (dump) کند، هرچند برخی کاربران از این ویژگی استفاده کرده # و خروجی را پردازش می‌کنند. لطفاً توجه داشته باشید که قالب پرونده‌های .data تولیدشده # سازگاری عقبروی را تضمین نمی‌کند. # نام‌های پیش‌فرض پرونده‌ها keepalived_parent.data، keepalived.data، # keepalived_check.data و keepalived_bfd.data هستند. این امر در صورتی که بیش از یک # نمونه keepalived روی سیستم در حال اجرا باشد مشکل ایجاد می‌کند. # برای برطرف کردن این مشکل، فعال کردن data_use_instance نام نمونه و فضای نام شبکه (network namespace) # را در نام پرونده‌های .data لحاظ می‌کند. # این موضوع برای SIGUSR2 جهت خروجی آمارها نیز اعمال می‌شود. \fBdata_use_instance \fR[] # اگر پرونده‌های تولیدشده توسط SIGUSR1 و SIGUSR2 روی فضای ذخیره‌سازی کُند باشند، نوشتن روی # آنها ممکن است باعث مسدود شدن فرایندهای keepalived شود. این گزینه امکان مشخص کردن # مکانی که پرونده‌ها باید در آن نوشته شوند را می‌دهد، و در حالت ایده‌آل باید یک tmpfs باشد تا # یک دیسک فیزیکی، و قطعاً نباید فضای ذخیره‌سازی متصل به شبکه یا سایر ذخیره‌سازهایی باشد که # می‌توانند بیش از چند میکروثانیه فرایند را مسدود کنند. # اگر path با یک / پایان یابد به عنوان یک دایرکتوری در نظر گرفته می‌شود و نام‌های معمولی پرونده‌ها # در آن دایرکتوری استفاده خواهند شد، در غیر این صورت به عنوان نام کامل مسیر پرونده‌ای که باید نوشته شود # استفاده خواهد شد. توجه داشته باشید که \fBdata_use_instance\fR نیز ممکن است نام پرونده را تغییر دهد. # برای پرونده‌های وضعیت، اینها نام‌های الگو هستند و برای فرایند checker پسوند "_checker"، # برای فرایند BFD پسوند "_bfd" و برای فرایند والد پسوند "_parent" اضافه خواهد شد. \fBstate_file_location \fRpath \fBstats_file_location \fRpath \fBjson_file_location \fRpath # مقدار json_version 2 داده‌های VRRP را در یک آرایه نام‌گذاری‌شده قرار می‌دهد و # جزئیات track_process را اضافه می‌کند. پیش‌فرض نسخه 1 است. \fBjson_version \fR{1|2} # ابزار iproute می‌تواند از دو دایرکتوری برای پرونده‌های پیکربندی خود استفاده کند، که پرونده‌های موجود در # /etc/iproute2 بر پرونده‌های /usr/share/iproute2 اولویت دارند. # ابزار ip (بسته‌ای که قابلیت ip route را فراهم می‌کند) گزینه‌های configure برای # مکان این دایرکتوری‌ها دارد. بخش configure در keepalived تلاش خواهد کرد مکان‌ها را یا از # صفحه راهنمای ip-route یا از خود ابزار ip پیدا کند. در صورتی که نتواند این کار را انجام دهد، # ممکن است لازم باشد مکان‌ها در اینجا مشخص شوند. \fBiproute_usr_dir \fRpath \fBiproute_etc_dir \fRpath } .fi .SH "رابط‌های Linkbeat (Linkbeat interfaces)" .PP بلوک linkbeat_interfaces امکان تعیین این را فراهم می‌کند که کدام رابط‌ها به جای اتکا به به‌روزرسانی‌های وضعیت netlink، باید از نظرسنجی (polling) از طریق وضعیت MII، Ethtool یا ioctl استفاده کنند. این امر امکان کنترل دقیق‌تری بر تعریف عمومی \fBlinkbeat_use_polling\fR ایجاد می‌کند. .PP این گزینه بر استفاده منسوخ‌شده از \fBlinkbeat_use_polling\fR در بلوک vrrp_instance ترجیح داده می‌شود، زیرا روش دوم تنها اجازه استفاده از linkbeat را روی رابط خودِ vrrp_instance می‌دهد، در حالی که \fRtrack_interface\fR، virtual_ipaddresses و virtual_iproutes ممکن است نیازمند پایش رابط‌های دیگری باشند که شاید به استفاده از نظرسنجی linkbeat نیاز داشته باشند. .PP نوع نظرسنجی پیش‌فرض MII است، مگر اینکه پشتیبانی نشود که در این صورت از ETHTOOL استفاده می‌شود، و اگر آن هم پشتیبانی نشود از نظرسنجی ioctl استفاده خواهد شد. نوع نظرسنجی ترجیحی می‌تواند با MII یا ETHTOOL یا IOCTL پس از نام رابط مشخص شود، اما اگر آن نوع پشتیبانی نشود، از نوعی که پشتیبانی می‌شود استفاده خواهد شد. .PP نحو linkbeat_interfaces به شرح زیر است: .nf \fBlinkbeat_interfaces\fR { eth2 enp2s0 ETHTOOL } .fi .SH "گروه‌های ردیابی ایستا (Static track groups)" .PP گروه‌های ردیابی ایستا برای مجاز ساختن نمونه‌های vrrp به ردیابی نشانی‌ها، مسیرها و قوانین ایستا استفاده می‌شوند. اگر یک نشانی/مسیر/قانون ایستا یک track group مشخص کند، در صورتی که آن نشانی/مسیر/قانون حذف شده و امکان بازیابی آن وجود نداشته باشد، نمونه vrrp به وضعیت fault منتقل خواهد شد. .PP نحو یک track group به شرح زیر است: .nf \fBtrack_group \fRGROUP1 { \fBgroup \fR{ VI_1 VI_2 } } .fi .SH "مسیرها/نشانی‌ها/قوانین ایستا (Static routes/addresses/rules)" .PP نرم‌افزار Keepalived می‌تواند نشانی‌ها، مسیرها و قوانین ایستا را پیکربندی کند. این نشانی‌ها، مسیرها و قوانین توسط vrrpd منتقل \fBNOT\fR (نمی‌شوند) و روی ماشین باقی می‌مانند. اگر از پیش روی ماشین‌های خود IPها و مسیرها را دارید و ماشین‌های شما می‌توانند یکدیگر را ping کنند، به این بخش نیازی ندارید. نحو قوانین و مسیرها همانند ip rule add/ip route add است (به جز اینکه نام‌های کوتاه شده گزینه‌ها به دلیل ابهامات پشتیبانی نمی‌شوند). مشخصه track_group به یک track_group نام‌گذاری‌شده اشاره دارد که نمونه‌های vrrp ردیابی‌کننده نشانی را فهرست می‌کند، بدین معنا که اگر نشانی حذف شود، نمونه‌های vrrp به وضعیت backup منتقل خواهند شد. یادداشت: از آنجا که قوانین بدون اولویت (preference) ممکن است به دلیل انتقال نمونه‌های vrrp از master به backup و غیره با ترتیب‌های متفاوتی اضافه شوند، قوانین باید دارای یک preference باشند. اگر یک preference مشخص نشود، keepalived یکی اختصاص می‌دهد، اما احتمالاً مطابق خواسته شما نخواهد بود. .PP نحو برای نشانی‌های مجازی و مسیرهای مجازی یکسان است. اگر هیچ عنصر dev مشخص نشود، به default_interface (پیش‌فرض eth0) تنظیم می‌شود. یادداشت: نشانی broadcast ممکن است به صورت '-' یا '+' برای پاک کردن یا تنظیم بیت‌های میزبان نشانی مشخص شود. .PP اگر یک مسیر یا قانون بتواند هم بر IPv4 و هم بر IPv6 اعمال شود، به صورت پیش‌فرض IPv4 در نظر گرفته می‌شود. برای اجبار یک مسیر/قانون به IPv6 بودن، کلیدواژه "inet6" را اضافه کنید. .PP به طور پیش‌فرض keepalived مسیرها را در ابتدا درج می‌کند (prepend، پیش‌فرض هسته) که مسیر را پیش از هر مسیر منطبق دیگری اضافه می‌کند (این رفتار مشابه فرمان (مستند نشده) 'ip route prepend' است). اگر 'add' مشخص شود، رفتار مشابه فرمان 'ip route add' خواهد بود، که مسیر را تنها در صورتی که مسیر منطبقی وجود نداشته باشد اضافه می‌کند. اگر 'append' مشخص شود، رفتار مشابه فرمان 'ip route append' خواهد بود، یعنی مسیر پس از هر مسیر منطبق اضافه می‌شود. یادداشت: قوانین مربوط به تطابق یک مسیر بین IPv4 و IPv6 تفاوت دارد؛ به عنوان مثال مشخص کردن یک proto متفاوت به این معنی است که یک مسیر منطبق می‌تواند برای IPv4 درج/الحاق شود اما برای IPv6 نه. در صورت تردید، آن را با استفاده از فرمان‌های 'ip route add/prepend/append' آزمایش کنید. .PP .nf \fBstatic_ipaddress \fR{ [/] [brd ] [dev ] [scope ] [label