ser2net.yaml(5) Serial to network proxy configuration file ser2net.yaml(5)

/etc/ser2net/ser2net.yaml - پرونده پیکربندی پروکسی سریال به شبکه

برنامه ser2net پیش‌تر برنامه‌ای برای برقراری اتصال شبکه به درگاه‌های سریال بود. اکنون برنامه‌ای برای اتصال یک gensio پذیرنده به gensioهای متصل‌شونده است. برای جزئیات در مورد gensioها به gensio(5) مراجعه کنید.

پیکربندی ser2net با YAML انجام می‌شود که انعطاف‌پذیر و استفاده از آن آسان است. برای نحوه کارکرد آن به مستندات yaml در اینترنت مراجعه کنید.

با این حال، دو نوع پرونده YAML وجود دارد که ser2net می‌تواند از آن‌ها استفاده کند: نسخه ۱ و نسخه ۲. پرونده‌های YAML نسخه ۱ قابلیت‌های بیشتری نسبت به پرونده‌های نسخه ۲ دارند، اما YAML غیراستاندارد هستند و یک تجزیه‌کننده استاندارد YAML نمی‌تواند آن‌ها را بخواند. ser2net بر اساس آنچه می‌یابد، نسخه را به طور خودکار تشخیص می‌دهد.

در نسخه ۲، می‌توانید چندین سند در یک پرونده داشته باشید و ser2net همه آن‌ها را می‌خواند. در YAML، اسناد درون یک پرونده با یک سطر جداگانه که فقط حاوی "---" در ابتدای آن است از یکدیگر جدا می‌شوند. اگرچه در هر سند فقط می‌توانید یک مجموعه از مقادیر پیش‌فرض (defaults)، تعاریف (defines)، اتصالات (connections) و غیره داشته باشید، اما برای داشتن بیش از یک مجموعه می‌توانید چندین سند در یک پرونده ایجاد کنید. برای نمونه، می‌توانید تمام اتصالات دارای یک مجموعه خاص از پیش‌فرض‌ها را در سند مجزای خود گروه‌بندی کنید.

YAML قابلیت ایجاد نام‌های مستعار (alias) را دارد که می‌توان از آن‌ها در سایر بخش‌های پرونده پیکربندی استفاده کرد. از این نام‌های مستعار می‌توان برای پیوند دادن اجزا بین بخش‌های پرونده، یا (به عنوان یک افزونه برای YAML) برای جایگزینی رشته استفاده کرد.

شما یک نام مستعار را در نسخه ۱ با دستور زیر تعریف می‌کنید:

define: &aliasname alias text

این کار یک نام مستعار با نام داده‌شده ایجاد می‌کند. سپس می‌توانید در جای دیگر به این صورت از آن استفاده کنید:

banner: *aliasname

و مقدار بنر "alias text" خواهد بود. بر خلاف YAML استاندارد، می‌توانید از این مورد درون رشته‌ها نیز با ساختار زیر استفاده کنید:

*(aliasname)

بنابراین اگر داشته باشید:

banner: My banner *(aliasname) is here

مقدار بنر به "My banner alias text is here" تبدیل می‌شود. برای نحوه مدیریت فاصله‌ها به مستندات YAML مراجعه کنید، اما به عنوان یک نکته، اگر مطمئن نیستید از نقل‌قول (quotes) استفاده کنید، مانند:

define: &aliasname "alias text"
banner: "My banner *(aliasname) is here"

اگر به هر دلیلی در متن خود به "*(" نیاز دارید، از "*(*" برای آن استفاده کنید.

برای پرونده‌های YAML نسخه ۲، تعریف به صورت زیر است:

defines:
aliasname: alias text
aliasname2: alias text 2

که در آن می‌توانید هر تعداد نام مستعار که مایلید فهرست کنید. در نسخه ۲، همیشه به جای "*" با "=" به یک نام مستعار ارجاع می‌دهید، مانند:


banner: "My banner =(aliasname) is here"

و اگر به هر دلیلی در متن خود به "=(" نیاز دارید، از "=(=" برای آن استفاده کنید.

در نسخه ۲، بر اساس YAML استاندارد، فقط می‌توانید یک بخش defines داشته باشید، بنابراین همه آن‌ها باید در یک‌جا باشند.

یک پرونده YAML ممکن است در سطح اصلی، پرونده دیگری را با دستور زیر شامل کند:

include: <filename>

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

در نسخه ۲، برای مطابقت با قوانین استاندارد YAML، در هر سند فقط می‌توانید یک include داشته باشید؛ بنابراین اگر به چندین include نیاز دارید، باید چندین سند ایجاد کنید.

شاید بخواهید گذرواژه‌ها و موارد مشابه را برای امنیت بهتر در پرونده‌های خارجی ذخیره کنید. برای نسخه ۱، قرار دادن "*{filename}" در یک مقدار اسکالر YAML محتویات پرونده را در آن نقطه درون مقدار اسکالر قرار می‌دهد. اگر به هر دلیلی در رشته به "*{" نیاز دارید، از "*{*" استفاده کنید.

برای نسخه ۲، به جای آن از "={filename}" استفاده کنید؛ و از "={=" برای گنجاندن یک "={" در پرونده استفاده کنید.

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

یک مشخصه اتصال در نسخه ۱ به این صورت آغاز می‌شود:

connection: &<alias>
<definition>

در نسخه ۲، به صورت زیر مشخص می‌شود:

connections:
<alias>:
<definition>

در نسخه ۲، تمام اتصالات باید در یک مکان و در کنار هم قرار گیرند.

بخش <definition> یک اتصال برای نسخه ۱ و نسخه ۲ یکسان است:

accepter: <accepter>
timeout: <number>
enable: on|off
connector: <connector>
options:
<option name>: <option value>
<option name>: <option value>...

یک <accepter> مشخصه یک gensio پذیرنده است. هنگامی که ser2net اتصالی را روی پذیرنده دریافت می‌کند، تلاش می‌کند اتصالی به gensio متصل‌شونده (<connector>) برقرار کند. نام مستعار (alias) الزامی است و نامی را تعیین می‌کند که برای اتصال در رابط مدیریتی و برای ارجاع از چرخاننده‌ها (rotators) استفاده می‌شود.

اگر اتصال در مدت زمان <timeout> ثانیه فعالیتی دریافت نکند، ser2net اتصال را خواهد بست. تنظیم <timeout> روی صفر، مهلت زمانی را غیرفعال می‌کند. فیلد timeout اختیاری است و مقدار پیش‌فرض آن صفر است.

مهلت زمانی (timeout) عملکردهای ظریفی دارد. هر داده‌ای از درگاه پذیرنده تایمر را بازنشانی می‌کند. ارسال داده کمی پیچیده‌تر است، زیرا لزوماً به این معنی نیست که طرف مقابل واقعاً وجود دارد. ser2net تلاش می‌کند صف‌های محلی را بررسی کند تا ببیند آیا داده‌ای در انتظار ارسال وجود دارد یا خیر. اگر تشخیص دهد که طرف مقابل بایت‌ها را نمی‌پذیرد، آن درگاه را "گیرکرده" (stuck) در نظر می‌گیرد و تنها درگاه‌های گیرکرده را در نظر می‌گیرد؛ یک درگاه گیرکرده باعث اتمام مهلت زمانی سایر درگاه‌ها نخواهد شد. اگر هیچ درگاهی گیر نکرده باشد، هر داده ارسالی تایمر را بازنشانی خواهد کرد.

اتصال را می‌توان با فیلد enable فعال یا غیرفعال کرد. فیلد enable اختیاری است و به طور پیش‌فرض روی on قرار دارد. این ویژگی برای غیرفعال کردن موقت درگاه با تنظیم enable روی off و ارسال سیگنال SIGHUP مفید است. اگر کاربرانی متصل باشند و شما درگاهی را غیرفعال کرده و SIGHUP ارسال کنید، کاربران قطع اتصال خواهند شد.

یک گزینه (option) تنظیمی از پیکربندی است که ربطی به gensioهای خاص ندارد و کنترل‌هایی کلی برای ser2net هستند. بخش options اختیاری است.

برای اطلاعات بیشتر در مورد gensioهای خاص موجود، به gensio(5) مراجعه کنید.

برای مجاز کردن یک اتصال TCP به درگاه سریال و نادیده گرفتن کنترل مودم، می‌توانید این کار را انجام دهید:

connection: &toS0tcp
accepter: tcp,1234
connector: serialdev,/dev/ttyS0,local

هر دو gensio پذیرنده و متصل‌شونده قابلیت پشته‌بندی (stack) دارند، بنابراین اگر می‌خواهید telnet را با پشتیبانی RFC2217 اضافه کنید، می‌توانید انجام دهید:

connection: &toS0telnet
accepter: telnet(rfc2217),tcp,1234
connector: serialdev,/dev/ttyS0,local

اگر می‌خواهید یک اتصال telnet روی SCTP را فقط روی IPv6 localhost بپذیرید و به یک اتصال telnet همراه با SSL روی tcp وصل شوید، می‌توانید بنویسید:

connection: &tomyhost
accepter: telnet,sctp,::1,1234
connector: telnet,ssl,tcp,myhost.domain.org,1234

پشتیبانی RFC2217 تنها با دستگاهی که قابلیت سریال داشته باشد به عنوان متصل‌کننده معنی دارد. همچنین توجه داشته باشید که IPv6 به طور کامل پشتیبانی می‌شود. پذیرنده‌ها به طور کلی به صورت پیش‌فرض هم IPv4 و هم IPv6 خواهند بود مگر اینکه خلاف آن مشخص شده باشد. برای جزئیات به gensio(5) مراجعه کنید.

و بله، SCTP پشتیبانی می‌شود و در صورت امکان استفاده، به شدت توصیه می‌شود. تنها مزیت Multi-homing آن به استفاده از آن می‌ارزد.

می‌توانید یک ورود امن با پشتیبانی telnet RFC2217 ایجاد کنید که سپس به یک اتصال IPMI sol متصل شود. توجه کنید که چگونه شکستن سطر متصل‌کننده با YAML انجام شده است:

connection: &authsol

accepter: telnet(rfc2217),mux,certauth,ssl,sctp,1234
connector: ipmisol,lan -U ipmiusr -P test -p 9001
ipmiserver.domain.org,9600
options:
banner: My banner

این‌ها چند مثال هستند. برای SSL و certauth، پیکربندی احراز هویت نادیده گرفته شده است که بعداً بیشتر توضیح داده می‌شود. استفاده از احراز هویت به شدت توصیه می‌شود؛ اکنون با gtlssh آسان است و اگر نیاز به استفاده از آن در یک برنامه دارید، با gensio آسان خواهد بود. حتی پشتیبانی python نیز وجود دارد. افزودن پشتیبانی برای سایر زبان‌های اسکریپت‌نویسی نباید چندان سخت باشد.

برخی از مقادیر رشته‌ای، مانند بنرها، قالب‌بندی خاصی برای درج مقادیر مختلف دارند. همه این‌ها با '\' پیشوند می‌خورند. این بخش کاراکترهای استاندارد \x زبان "C" را می‌پذیرد.

\a - زنگ (bell)
\b - پس‌بر (backspace)
\f - فرم‌فید (form feed)
\n - خط جدید (newline)
\r - بازگشت به ابتدای سطر (carriage return)
\t - تب (tab)
\v - تب عمودی (vertical tab)
\\ - \
\? - ?
\' - '
\" - "
\nnn - مقدار هشت‌هشتی (اکتال) برای nnn
\xXX - مقدار شانزده‌شانزدهی (هگز) برای XX
\d - رشته متصل‌کننده (/dev/ttyS0 و غیره)
\o - نام اتصال.
\p - شماره درگاه شبکه
\B - پارامترهای درگاه سریال (مانند 9600N81) در صورت کاربرد
\Y -> سال
\y -> روز از سال (روزها از اول ژانویه)
\M -> ماه (Jan، Feb، Mar و غیره)
\m -> ماه (به صورت عدد)
\A -> روز هفته (Mon، Tue و غیره)
\D -> روز ماه
\e -> مبدأ زمان یونیکس (epoc - ثانیه‌ها از ۱ ژانویه ۱۹۷۰)
\U -> میکروثانیه در ثانیه جاری
\p -> شماره درگاه محلی
\I -> نشانی IP راه دور (در قالب نقطه‌دار)
\H -> ساعت (زمان ۲۴ ساعته)
\h -> ساعت (زمان ۱۲ ساعته)
\i -> دقیقه
\S -> ثانیه
\q -> am/pm
\P -> AM/PM

از این توالی‌ها می‌توان برای یکتا کردن نام پرونده به ازای هر باز شدن و شناسایی اینکه نام پرونده برای کدام درگاه/دستگاه بوده است استفاده کرد. توجه داشته باشید که در نام‌های پرونده هنگام استفاده از \d یا \o، همه‌چیز تا آخرین علامت / و خود آن در نام دستگاه حذف می‌شود، زیرا نمی‌توانید در نام پرونده علامت / داشته باشید. بنابراین در نام پرونده، /dev/ttyS0 تبدیل به ttyS0 می‌شود.

توجه داشته باشید که در بنرها و سایر رشته‌های خروجی (نه نام‌های پرونده) شما باید از \r\n برای ارسال یک سطر جدید استفاده کنید؛ این پردازش خام است و \n فقط یک سطر پایین می‌رود و به ابتدای سطر بازنمی‌گردد.


درگاه را طوری تنظیم می‌کند که در صورت ورود کاربر جدید، کاربر قبلی بیرون انداخته شود (kick). زمانی که مکرراً فراموش می‌کنید از جای دیگر خارج شوید مفید است.

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

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

اگرچه این گزینه به طور کلی ایده خوبی است، اما برای حفظ رفتار قبلی به طور پیش‌فرض روی false است زیرا بعداً اضافه شده است. ممکن است در یک انتشار اصلی به طور پیش‌فرض روی true تغییر کند.


هنگامی که یک کلاینت متصل می‌شود بنر داده‌شده را نمایش می‌دهد. از قالب‌بندی رشته‌ها همان‌طور که در "رسیدگی به رشته‌های خاص" در بالا توضیح داده شد استفاده می‌کند.

امضای RFC2217 را در صورت درخواست کلاینت ارسال می‌کند. این مقدار می‌تواند یک رشته خالی باشد.

رشته داده‌شده را در اولین باز شدن به دستگاه ارسال می‌کند. این مقدار می‌تواند یک رشته خالی باشد. از قالب‌بندی رشته‌ها همان‌طور که در "رسیدگی به رشته‌های خاص" در بالا توضیح داده شد استفاده می‌کند.

رشته داده‌شده را در بسته شدن نهایی به دستگاه ارسال می‌کند. این مقدار می‌تواند یک رشته خالی باشد. از قالب‌بندی رشته‌ها همان‌طور که در "رسیدگی به رشته‌های خاص" در بالا توضیح داده شد استفاده می‌کند.

اگر رشته داده‌شده در حال آمدن از سمت متصل‌کننده مشاهده شود، اتصال را می‌بندد. مقایسه در اینجا برای سادگی، ابتدایی است. عبارت‌های پیچیده با بخش‌های تکراری ممکن است به درستی مقایسه نشوند. برای مثال، اگر رشته closeon شما "ababc" باشد و رشته ورودی "abababc" باشد، مقایسه ناموفق خواهد بود زیرا الگوریتم مقایسه "ababa" را می‌بیند و روی "a" نهایی شکست می‌خورد و دوباره از "abc" شروع می‌کند که مطابقت نخواهد داشت. این نباید در بیشتر موارد مشکلی ایجاد کند، اما اگر ایجاد کرد با نویسندگان تماس بگیرید تا بهبود یابد.

اگر پذیرنده در هنگام راه‌اندازی بالا نیاید، این تعداد ثانیه صبر کرده و مجدداً تلاش می‌کند.

در یک درگاه اتصال معکوس (connect-back)، اگر متصل‌کننده بالا نیاید یا قطع شود، این تعداد ثانیه صبر کرده و دوباره تلاش می‌کند.

هنگامی که پذیرنده باز می‌شود، پرونده داده‌شده را باز می‌کند و تمام داده‌های خوانده‌شده از دستگاه فیزیکی (و در نتیجه نوشته‌شده به درگاه شبکه/پذیرنده کلاینت) را در پرونده ذخیره می‌کند. اگر پرونده از قبل وجود داشته باشد، داده‌ها به آن الحاق می‌شوند. پرونده با بسته شدن درگاه بسته می‌شود. نام پرونده از قالب‌بندی رشته‌ها همان‌طور که در "رسیدگی به رشته‌های خاص" در بالا توضیح داده شد استفاده می‌کند.

مشابه tr است، اما داده‌های نوشته‌شده به gensio متصل‌شونده را ردگیری می‌کند.

هر دو داده خوانده‌شده و نوشته‌شده را در یک پرونده یکسان ردگیری می‌کند. توجه داشته باشید که این مستقل از tr و tw است، بنابراین می‌توانید خواندن، نوشتن و هر دو را در پرونده‌های متفاوتی ردگیری کنید.

خروجی hexdump را برای تمام پرونده‌های ردگیری فعال/غیرفعال می‌کند. هر سطر در پرونده ردگیری ۸ بایت (یا کمتر) در قالب استاندارد hex+ASCII خواهد بود. این ویژگی برای اشکال‌زدایی یک پروتکل باینری مفید است.

یک برچسب زمان (timestamp) به تمام پرونده‌های ردگیری اضافه/حذف می‌کند. اگر hexdump برای پرونده ردگیری فعال باشد، یک برچسب زمان به ابتدای هر سطر اضافه می‌شود. همچنین هنگامی که یک کلاینت راه دور به درگاه متصل یا از آن قطع می‌شود، یک سطر با برچسب زمان در پرونده ردگیری ثبت می‌گردد.
[trace-read-|trace-write-|trace-both-]hexdump: true|false

خروجی hexdump را تنها برای یک پرونده ردگیری فعال/غیرفعال می‌کند. ممکن است با hexdump ترکیب شود. ترتیب اهمیت دارد.
[trace-read-|trace-write-|trace-both-]timestamp: true|false

برچسب زمان را فقط به یکی از پرونده‌های ردگیری اضافه/حذف می‌کند. ممکن است با [-]timestamp ترکیب شود. ترتیب اهمیت دارد.

باعث می‌شود که عملیات همگام‌سازی telnet یک وقفه (break) ارسال کند. به طور پیش‌فرض داده‌ها تا علامت داده (data mark) تخلیه می‌شوند، اما هیچ بریکی ارسال نمی‌شود.

تأخیر کوتاه پس از دریافت هر کاراکتر در gensio متصل‌شونده را قبل از ارسال داده روی gensio پذیرفته‌شده فعال می‌کند. به طور معمول ser2net به اندازه زمان دریافت ۲ کاراکتر درگاه سریال یا حداقل 1000us قبل از ارسال صبر می‌کند. این کار امکان استفاده بهینه‌تر از منابع شبکه را هنگام دریافت حجم زیادی از داده فراهم می‌کند، اما تعاملی منطقی را ارائه می‌دهد. پیش‌فرض true است.

توجه داشته باشید که این ویژگی برای ایجاد تعادل بین بهره‌وری شبکه و تعامل‌پذیری طراحی شده است. برای تضمین حداقل اندازه تکه داده طراحی نشده است، زیرا زمان‌بندی وظایف و پشته‌های شبکه نیز می‌توانند این موارد را تغییر دهند.


زمان انتظار پس از عدم دریافت چیزی از اتصال قبل از ارسال به gensio پذیرفته‌شده را بر حسب دهم کاراکترهای درگاه سریال تنظیم می‌کند. بنابراین تنظیم این مقدار روی 25 باعث می‌شود ser2net به مدت زمان لازم برای دریافت ۲.۵ کاراکتر درگاه سریال پس از دریافت آخرین کاراکتر قبل از ارسال داده به درگاه TCP صبر کند. مقدار پیش‌فرض 20 است و حداکثر آن 1000 می‌باشد. این گزینه برای gensioهای غیرسریال نادیده گرفته می‌شود.

مشابه chardelay-scale است، اما بر حسب میکروثانیه. مقدار بزرگ‌تر میان chardelay-scale و chardelay-min استفاده می‌شود. مقدار پیش‌فرض 1000 و حداکثر 100000 است.

حداکثر تأخیری را که ser2net بر حسب میکروثانیه پس از دریافت یک کاراکتر قبل از ارسال داده منتظر خواهد ماند تنظیم می‌کند. مقدار پیش‌فرض 20000 و حداکثر 1000000 است. این گزینه کارکرد روان اتصال را در سرعت‌های پایین حفظ می‌کند.

اگر رشته داده‌شده در حال آمدن از سمت متصل‌کننده مشاهده شود، داده‌های بافرشده را تا و با احتساب آن رشته ارسال می‌کند. به طور پیش‌فرض غیرفعال است. به عنوان مثال، می‌توان آن را با تنظیمات مناسب chardelay روی \r\n تنظیم کرد تا هر بار یک سطر ارسال شود. از قالب‌بندی رشته‌ها همان‌طور که در "رسیدگی به رشته‌های خاص" در بالا توضیح داده شد استفاده می‌کند. برای اطلاعات مهم در مورد نحوه مقایسه، به نکات مربوط به رشته closeon مراجعه کنید.

اندازه بافر خواندن از gensio متصل‌شونده و نوشتن به gensio پذیرفته‌شده را تعیین می‌کند.

اندازه بافر خواندن از gensio پذیرفته‌شده و نوشتن به gensio متصل‌شونده را تعیین می‌کند.

از LED تعریف‌شده قبلی برای نشان دادن ترافیک ارسال سریال (tx) روی این درگاه استفاده می‌کند. برای نسخه ۱ این باید یک نام مستعار YAML مانند *led2 باشد. برای نسخه ۲ فقط از نام، مانند led2 استفاده کنید.

از LED تعریف‌شده قبلی برای نشان دادن ترافیک دریافت سریال (rx) روی این درگاه استفاده می‌کند. برای نسخه ۱ این باید یک نام مستعار YAML مانند *led2 باشد. برای نسخه ۲ فقط از نام، مانند led2 استفاده کنید.

از LED تعریف‌شده قبلی برای نشان دادن اتصال کاربر به درگاه استفاده می‌کند. برای نسخه ۱ این باید یک نام مستعار YAML مانند *led2 باشد. برای نسخه ۲ فقط از نام، مانند led2 استفاده کنید.

حداکثر تعداد اتصالاتی را که می‌توان روی این درگاه TCP خاص برقرار کرد تعیین می‌کند. اگر بیش از یک اتصال به یک درگاه برقرار کنید، خروجی هر درگاه به دستگاه می‌رود و خروجی دستگاه به طور همزمان به تمام درگاه‌ها ارسال می‌شود. برای جزئیات به "اتصالات چندگانه" در زیر مراجعه کنید. پیش‌فرض 1 است.

اتصالات راه دور مجاز را مشخص می‌کند، که در آن addr یک نشانی استاندارد است که عموماً به شکل <ip address>,<port> می‌باشد. چندین نشانی را می‌توان با نقطه ویرگول از هم جدا کرد، و می‌توانید remaddr را بیش از یک بار مشخص کنید.

اگر نسخه gensio شما 3.0.3 یا جدیدتر است، می‌توانید از ماسک‌های زیرشبکه (subnet masks) با remaddr استفاده کنید، مانند:

remaddr: 192.168.33.0/24,0;1234:5678:9abc:21::/64,0
و این امکان اتصالات را برای کل آن زیرشبکه‌ها فراهم می‌کند.

اگر درگاه یک نشانی را روی صفر تنظیم کنید، ser2net اتصال از هر درگاهی از میزبان شبکه داده‌شده را می‌پذیرد.


اگر true باشد، هیچ داده‌ای را از متصل‌کننده به پذیرنده منتقل نمی‌کند. هر داده دریافتی از متصل‌کننده را دور می‌ریزد.

اگر true باشد، هیچ داده‌ای را از پذیرنده به متصل‌کننده منتقل نمی‌کند. هر داده دریافتی از پذیرنده را دور می‌ریزد.

اتصالات معکوسی را مشخص می‌کند که هنگام ورود داده به دستگاه برقرار خواهند شد. هنگامی که داده در سمت دستگاه (متصل‌کننده اصلی اتصال) وارد می‌شود، ser2net به هر یک از connbackهای مشخص‌شده متصل می‌شود. تا زمانی که داده وارد نشود اتصالی برقرار نمی‌شود و مهلت‌های زمانی عادی اتصال اعمال می‌شوند.

توجه داشته باشید که این کار همواره یکی از اتصالات اتصال را استفاده خواهد کرد. در صورتی که به بیش از یک مورد نیاز دارید یا می‌خواهید اتصالات ورودی را نیز بپذیرید، ممکن است لازم باشد max-connections را افزایش دهید.

نشانی‌های اتصال معکوس باید با قالب نشانی پذیرنده مطابقت داشته باشند. بنابراین، برای مثال اگر پذیرنده شما "telnet,tcp,1234" است، نشانی اتصال معکوس شما باید چیزی شبیه "telnet,tcp,hostname,1123" باشد.

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

یک درگاه اتصال معکوس همچنین می‌تواند اتصالاتی دریافت کند اگر تعداد اتصالات را بیشتر از تعداد اتصال‌های معکوس مشخص‌شده تنظیم کنید. با این حال، آن اتصالات هیچ داده‌ای از درگاه دریافت نخواهند کرد مگر اینکه تمام اتصالات معکوس برقرار شده باشند.


یک مهلت زمانی جداگانه برای درگاه‌های اتصال معکوس مشخص می‌کند. معمولاً از مهلت زمانی اصلی استفاده می‌کند؛ این گزینه به شما اجازه می‌دهد مهلت زمانی متفاوتی داشته باشید. تنظیم آن روی صفر، مانند مهلت زمانی اصلی، مهلت زمانی را غیرفعال می‌کند.

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

احراز هویت PAM را فعال کرده و نام سرویس PAM را تعیین می‌کند.

کاربرانی که مجاز به استفاده از این اتصالات هستند. اگر احراز هویت روی اتصالات فعال نباشد، این گزینه معنایی ندارد. اگر این گزینه تنظیم نشده یا پیش‌فرض باشد، همه کاربران مجاز هستند. اگر این گزینه روی یک مجموعه خالی از کاربران تنظیم شود، هیچ کاربری مجاز نخواهد بود. این گزینه را می‌توان بیش از یک بار مشخص کرد، هر کدام کاربران بیشتری را اضافه می‌کند.

پشتیبانی mdns را برای اتصال فعال/غیرفعال می‌کند. اگر این گزینه را تنظیم کنید و mdns در دسترس باشد، ser2net یک سرویس روی mdns برای درگاه ایجاد می‌کند.

رابط شبکه خاص را برای اعلان دستگاه تعیین می‌کند. پیش‌فرض -1 است که به معنای همه رابط‌های شبکه است.

تعیین می‌کند کدام نوع شبکه برای اعلان دستگاه ارائه شود. پیش‌فرض unspec است که به معنای انجام ipv4 و ipv6 است.

نام را در اعلان mDNS تعیین می‌کند. پیش‌فرض نام اتصال است.

نوع را در اعلان mDNS تعیین می‌کند. پیش‌فرض "_iostream._xxx" است که در آن xxx بر اساس نوع gensio یکی از مقادیر tcp، udp یا sctp است.

دامنه را در اعلان mDNS تعیین می‌کند. پیش‌فرض تنظیمات سیستم است. این مقدار را تنظیم نکنید مگر اینکه واقعاً بدانید چه می‌کنید.

میزبان را در اعلان mDNS تعیین می‌کند. پیش‌فرض تنظیمات سیستم است. این مقدار را تنظیم نکنید مگر اینکه واقعاً بدانید چه می‌کنید.

یک رشته متنی به اعلان mDNS اضافه می‌کند. رشته باید به شکل "name=value" باشد. می‌توانید هر متنی را که می‌خواهید در رشته‌ها قرار دهید. دو رشته پیش‌فرض توسط ser2net اضافه می‌شود: "provider=ser2net" و "...=gensiostack" که در آن پشته gensioها اضافه شده است، مانند "telnet(rfc2217),tcp)". ایده gensiostack این است که می‌توانید نشانی را به انتهای آن اضافه کرده و با استفاده از ()str_to_gensio اتصالی برقرار کنید.

در لینوکس ویژگی‌های سیستم را از sysfs برای درگاه‌های سریال USB به فیلدهای mDNS txt اضافه می‌کند. اگر درگاه سریال USB باشد، "devicetype=serialusb" و ویژگی‌های زیر را از sysfs اضافه می‌کند: bInterfaceNumber، interface، idProduct، idVendor، serial، manufacturer، product. اگر در sysfs موجود نباشند، اضافه نمی‌شوند. اگر درگاه سریال USB نباشد، عبارت "devicetype=serial" اضافه می‌شود.

نکته: هنگام استفاده از gensiostack با ()str_to_gensio *بسیار* مراقب باشید. صرفاً فراخوانی کورکورانه ()str_to_gensio با آن می‌تواند منجر به مشکلات امنیتی قابل توجهی شود، زیرا می‌تواند gensioهای pty، stdio، trace و غیره را درون خود منتقل کند. شما باید یا بررسی کنید که پشته یک مجموعه ایمن است یا فقط از آن برای کسب اطلاعات استفاده کنید. به شما هشدار داده شده است. مراقب باشید.

یک چرخاننده به یک اتصال شبکه منفرد اجازه می‌دهد به یکی از چندین اتصال متصل شود.

مشخصه یک چرخاننده در نسخه ۱ به صورت زیر شروع می‌شود:

rotator: &<alias>
<definition>

مشخصه یک چرخاننده در نسخه ۲ به صورت زیر شروع می‌شود:

rotators:
<alias>:
<definition>

درست مانند اتصالات، در نسخه ۲ باید تمام چرخاننده‌ها را در کنار یکدیگر قرار دهید.

تعریف یک چرخاننده بین نسخه ۱ و نسخه ۲ تقریباً یکسان است:

accepter: <accepter>
connections: [
<connection alias>,
<connection alias>....
]
options:
<option name>: <option val>
<option name>: <option val>...

یک چرخاننده چهار گزینه احتمالی دارد: "authdir"، "pamauth"، "allowed-users" و "accepter-retry-time" که هر چهار مورد مانند اتصالات هستند.

برای نسخه ۱، باید از نام‌های مستعار YAML برای اتصالات استفاده کنید. برای نسخه ۲، فقط از نام‌های مستعار استفاده کنید.

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

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

برای تنظیم یک مقدار پیش‌فرض در نسخه ۱، دستور زیر را اجرا کنید:

default:

name: <default name>
value: <default value>
class: <default class>

در نسخه ۲، مانند سایر موارد، پیش‌فرض‌ها همگی در یک مکان در سند قرار می‌گیرند، مانند:

defaults:
<name>:
value: <default value>
class: <default class>
<name2>:
value: <default value>
class: <default class>

کلاس اختیاری است، اگر وجود نداشته باشد، پیش‌فرض پایه را برای همه کلاس‌ها تعیین می‌کند که استفاده می‌شود مگر اینکه برای یک کلاس خاص بازنویسی شده باشد. اگر کلاس وجود داشته باشد، پیش‌فرض را برای یک کلاس gensio خاص تعیین می‌کند. همچنین یک کلاس ser2net وجود دارد که برای گزینه‌های خاص ser2net است.

کلاس زمانی مفید است که بخواهید مقادیر متفاوتی برای انواع مختلف gensio داشته باشید. برای مثال، اگر می‌خواهید تمام درگاه‌های سریال با نرخ ۹۶۰۰ باود و تمام اتصالات IPMI SOL با نرخ ۱۱۵۲۰۰ باود اجرا شوند، می‌توانید این کار را انجام دهید:

default:
name: speed
value: 9600
class: serialdev
default:
name: speed
value: 115200
class: ipmisol

مقدار نیز اختیاری است؛ اگر وجود نداشته باشد، مقدار رشته‌ای روی NULL و مقدار صحیح روی 0 تنظیم می‌شود.

ترتیب در پرونده مهم است، شما باید یک مقدار پیش‌فرض را قبل از استفاده از آن تنظیم کنید و می‌توانید مقدار پیش‌فرض را تغییر دهید. این تغییر روی تمام استفاده‌های پس از تنظیم تأثیر خواهد گذاشت.

برای حذف یک مقدار پیش‌فرض برای یک کلاس (به طوری که از پیش‌فرض پایه استفاده کند)، در نسخه ۱ به صورت زیر عمل کنید:

delete_default:
name: <default name>,
class: <default class>

برای نسخه ۲، به این صورت عمل کنید:

delete_defaults:
<default name>: [ <class1>, <class2>, ... ]
<default name2>: [ <class1>, <class2>, ... ]
و این کار پیش‌فرض‌ها را برای کلاس‌های موجود در فهرست پس از آن حذف می‌کند.

شما باید کلاس را ارائه دهید، نمی‌توانید پیش‌فرض‌های پایه را حذف کنید.

مقادیر پیش‌فرض زیر مختص ser2net هستند که همراه با مقادیر پیش‌فرض آن‌ها آورده شده‌اند:

اگر یک sync مربوط به telnet دریافت شود، یک وقفه (break) روی gensio متصل ارسال می‌کند (در صورت کاربرد). به طور پیش‌فرض داده‌ها تا علامت داده تخلیه می‌شوند، اما هیچ وقفه ارسال نمی‌شود.

اگر کاربر جدیدی روی اتصالی وارد شود که در حال حاضر کاربر دارد، کاربر قبلی را بیرون می‌اندازد.

تأخیر کوتاهی را پس از هر کاراکتر دریافت‌شده روی درگاه سریال قبل از ارسال داده روی درگاه TCP فعال می‌کند. به طور معمول ser2net به اندازه زمان دریافت ۲ کاراکتر درگاه سریال یا حداقل 1000us قبل از ارسال روی درگاه TCP صبر می‌کند. این کار امکان استفاده بهینه‌تر از منابع شبکه را هنگام دریافت مقادیر زیادی از داده فراهم می‌کند، اما تعاملی منطقی را فراهم می‌سازد.

تعداد کاراکترهای درگاه سریال را بر حسب دهم کاراکتر برای انتظار پس از دریافت از درگاه سریال و ارسال به درگاه TCP تنظیم می‌کند. بنابراین تنظیم این مقدار روی 25 باعث می‌شود ser2net به مدت زمانی که برای دریافت ۲.۵ کاراکتر درگاه سریال طول می‌کشد قبل از ارسال داده به درگاه TCP صبر کند. این مقدار می‌تواند بین ۱ تا ۱۰۰۰ باشد.

حداقل تأخیری را که ser2net منتظر می‌ماند، بر حسب میکروثانیه تنظیم می‌کند. اگر محاسبه chardelay-scale به مقداری کوچک‌تر از این عدد منجر شود، این عدد به جای آن استفاده می‌شود. مقدار پیش‌فرض 1000 است. این مقدار می‌تواند بین ۱ تا ۱۰۰۰۰۰ باشد.

اندازه بافر خواندن از درگاه شبکه و نوشتن به دستگاه سریال را تعیین می‌کند.

اندازه بافر خواندن از دستگاه سریال و نوشتن به درگاه شبکه را تعیین می‌کند.

حداکثر تعداد اتصالاتی را که می‌توان روی این درگاه TCP خاص برقرار کرد تعیین می‌کند. اگر بیش از یک اتصال به یک درگاه برقرار کنید، خروجی هر درگاه به دستگاه می‌رود و خروجی دستگاه به طور همزمان به تمام درگاه‌ها ارسال می‌شود. برای جزئیات به "اتصالات چندگانه" در زیر مراجعه کنید.

اتصالات راه دور مجاز را مشخص می‌کند، که در آن addr یک نشانی استاندارد به شکل گفته‌شده است (به "درگاه شبکه" در بالا مراجعه کنید). چندین نشانی را می‌توان با نقطه ویرگول از هم جدا کرد، و می‌توانید remaddr را بیش از یک بار مشخص کنید. اگر درگاه یک نشانی را روی صفر تنظیم کنید، ser2net اتصال از هر درگاهی را از میزبان شبکه داده‌شده می‌پذیرد. اگر در ابتدای نشانی علامت "!" داده شود، نشانی یک نشانی "اتصال معکوس" (connect back) است. اگر یک نشانی اتصال معکوس مشخص شود، یکی از اتصالات شبکه (به max-connections مراجعه کنید) برای آن نشانی رزرو می‌شود. اگر داده‌ای به دستگاه وارد شود، ser2net تلاش می‌کند به آن نشانی متصل شود. این ویژگی روی TCP و UDP کار می‌کند.

پوشه احراز هویت برای ser2net. برای جزئیات بیشتر به بخش احراز هویت مراجعه کنید.

پوشه احراز هویت برای ser2net برای اتصالات مدیریتی. برای جزئیات بیشتر به بخش "اتصالات مدیریتی" مراجعه کنید.

نام سرویس PAM برای احراز هویت PAM در ser2net (مقدار <NULL> برای غیرفعال بودن).

نام سرویس PAM برای احراز هویت PAM اتصالات مدیریتی ser2net (مقدار <NULL> برای غیرفعال بودن). برای جزئیات بیشتر به "اتصالات مدیریتی" مراجعه کنید.

رابط mDNS پیش‌فرض.

نوع mDNS پیش‌فرض.

دامنه mDNS پیش‌فرض.

میزبان mDNS پیش‌فرض.

یک پذیرنده مدیریتی وجود دارد که می‌توانید برای ser2net تعریف کنید، این پذیرنده به شما امکان می‌دهد وارد سیستم شوید، وضعیت را مشاهده کنید و برخی موارد را تغییر دهید. برای جزئیات در مورد نحوه استفاده از آن، به بخش "ADMIN INTERFACE" در ser2net(8) مراجعه کنید. قالب آن به این صورت است:

admin: [&<name>]
accepter: <accepter>
options:
<option name>: <option value>
<option name>: <option value>...

گزینه‌های احراز هویت موجود عبارتند از "authdir-admin" که پوشه احراز هویت را برای درگاه مدیریت تعیین می‌کند و "pamauth-admin" که نام سرویس PAM را تعیین کرده و احراز هویت PAM را فعال می‌کند. هر دو با "authdir" و "pamauth" برای اتصالات تفاوت دارند، اگرچه می‌توانید آن‌ها را روی مقدار یکسانی تنظیم کنید.

علاوه بر این، همان گزینه‌های mdns که برای اتصالات در دسترس هستند برای درگاه‌های مدیریت نیز در دسترس می‌باشند. همچنین می‌توانید یک نام مستعار اختیاری تعیین کنید که نام mdns را نیز تنظیم می‌کند.

مانند اتصالات، گزینه‌های پیش‌فرض mdns برای "mdns-interface"، "mdns-type"، "mdns-domain" و "mdns-host" کار می‌کنند. بر خلاف اتصالات، مقدار دودویی (boolean) مربوط به "mdns" از پیش‌فرض نمی‌آید، بلکه باید آن را به عنوان یک گزینه مدیریتی مشخص کنید تا mdns برای درگاه مدیریت روشن شود. این امر برای امکان تعیین جداگانه آن و حفظ سازگاری با گذشته است.

برنامه ser2net می‌تواند در طول فعالیت سریال LEDها را چشمک‌زن کند. برای ایجاد یک LED در نسخه ۱، به این صورت عمل کنید:

led: &<alias>
driver: sysfs
options:
<option name>: <option value>
<option name>: <option value>

در نسخه ۲، از ساختار زیر استفاده کنید:

leds:
<alias>:
driver: sysfs
options:
<option name>: <option value>
<option name>: <option value>
<alias>:
driver: sysfs
options:
<option name>: <option value>
<option name>: <option value>

تنها راه‌انداز (driver) پشتیبانی‌شده sysfs است. گزینه‌های پشتیبانی‌شده عبارتند از:

device: <sysfs device name>
نام LED را در sys/class/led/ مشخص می‌کند. این نام‌ها عموماً دارای ":" هستند، بنابراین باید نام را در میان نقل‌قول قرار دهید. این گزینه الزامی است.

duration: <time in ms>
مدت زمان بر حسب میلی‌ثانیه برای چشمک زدن LED. پیش‌فرض 10 است.

state: <number>
مقداری که LED برای فعال شدن روی آن تنظیم می‌شود. پیش‌فرض 1 است، اما ممکن است نیاز به مقدار متفاوتی باشد.

mode: transient | solid
حالت LED را به صورت transient برای یک چشمک کوتاه هنگام تحریک یا solid برای یک حالت روشن/خاموش ساده تنظیم می‌کند. به طور کلی شما از حالت transient برای فعالیت I/O استفاده می‌کنید، led-rx و led-tx، و از حالت solid برای نظارت بر فعال بودن یا نبودن اتصال استفاده می‌کنید، led-conn.

شما به LED از طریق نام مستعار در بخش گزینه‌های اتصال ارجاع می‌دهید، برای جزئیات به آن بخش مراجعه کنید. اطمینان حاصل کنید که دستور "modprobe ledtrig-transient" را اجرا کرده‌اید وگرنه محرک‌ها کار نخواهند کرد، چرا که آن‌ها به محرک transient نیاز دارند.

همچنین احتمالاً برای دسترسی به تنظیمات LED به دسترسی ریشه (root) نیاز خواهید داشت.

نکته: yaml سازوکار نقل‌قول مخصوص به خود را دارد، برای جزئیات بیشتر به زیر مراجعه کنید.

نام‌های پرونده، بنرها، رشته‌های باز/بسته‌کردن، رشته‌های closeon و رشته‌های sendon ممکن است حاوی توالی‌های فرار معمولی "C" و تعداد زیادی توالی فرار دیگر باشند:

\a - زنگ (bell)
\b - پس‌بر (backspace)
\f - فرم‌فید (form feed)
\n - خط جدید (newline)
\r - بازگشت به ابتدای سطر (carriage return)
\t - تب (tab)
\v - تب عمودی (vertical tab)
\\ - \
\? - ?
\' - '
\" - "
\nnn - مقدار هشت‌هشتی برای nnn
\xXX - مقدار شانزده‌شانزدهی برای XX
\d - رشته gensio متصل‌شونده (serialdev,/dev/ttyS0 و غیره)
\o - دستگاه همان‌طور که در سطر پیکربندی مشخص شده است (قبل از جایگزینی DEVICE)
\N - نام درگاه
\p - رشته پذیرنده
\B - پارامترهای درگاه سریال (مانند 9600N81)
\Y -> سال
\y -> روز از سال (روزها از اول ژانویه)
\M -> ماه (Jan، Feb، Mar و غیره)
\m -> ماه (به صورت عدد)
\A -> روز هفته (Mon، Tue و غیره)
\D -> روز ماه
\e -> مبدأ زمان یونیکس (ثانیه‌ها از ۱ ژانویه ۱۹۷۰)
\U -> میکروثانیه در ثانیه جاری
\p -> شماره درگاه محلی
\I -> نشانی راه دور gensio پذیرنده
\H -> ساعت (زمان ۲۴ ساعته)
\h -> ساعت (زمان ۱۲ ساعته)
\i -> دقیقه
\S -> ثانیه
\q -> am/pm
\P -> AM/PM

علاوه بر این، برای سازگاری با گذشته از آنجا که نام‌های پرونده و بنرها پیش‌تر قالب‌بندی متفاوتی داشتند، \s پارامترهای درگاه سریال در صورت قرار داشتن در بنر و ثانیه‌ها در صورت قرار داشتن در نام پرونده است. استفاده از این مورد توصیه نمی‌شود زیرا ممکن است در آینده تغییر کند.

از این توالی‌ها می‌توان برای یکتا کردن نام پرونده به ازای هر باز شدن و شناسایی اینکه نام پرونده برای کدام درگاه/دستگاه بوده است استفاده کرد. توجه داشته باشید که در نام‌های پرونده هنگام استفاده از \d یا \o، همه‌چیز تا آخرین علامت / و خود آن در نام دستگاه حذف می‌شود، زیرا نمی‌توانید در نام پرونده علامت / داشته باشید. بنابراین در نام پرونده /dev/ttyS0 تبدیل به ttyS0 می‌شود.

فرمت yaml توالی‌های فرار "\" را درون نقل‌قول دوتایی (double quotes) پردازش می‌کند، بنابراین استفاده از نقل‌قول دوتایی برای موارد فوق توصیه نمی‌شود. اگر مقادیر را در نقل‌قول تکی (single quotes) قرار دهید، yaml آن‌ها را پردازش نمی‌کند و در عوض آن‌ها را بدون تغییر عبور می‌دهد تا توسط ser2net پردازش شوند.

فرمت YAML و پردازش پذیرنده/متصل‌کننده هنگام برخورد با نقل‌قول‌ها با یکدیگر تعامل دارند. به طور پیش‌فرض، YAML تعداد فاصله‌های بین عناصر جداشده با فاصله را نادیده می‌گیرد. سطرهایی که پس از یک عنصر تورفتگی دارند به عنوان ادامه‌ای از آن عنصر در نظر گرفته می‌شوند، بنابراین کدی مانند:

connector: serialdev,/dev/ttyUSB0,
9600n81
local nobreak
rtscts
مشابه زیر است:
connector: serialdev,/dev/ttyUSB0, 9600n81 local nobreak rtscts

فرمت YAML سازوکارهای نقل‌قول استاندارد خود را دارد، بنابراین اگر این کار را انجام دهید:

connector: "serialdev,/dev/ttyUSB0,9600n81 local"

دو فاصله قبل از "local" هنگام ارسال به پردازش متصل‌کننده حفظ خواهد شد (اگرچه در این حالت اهمیتی نخواهد داشت زیرا پردازش متصل‌کننده فاصله‌های اضافی را نادیده می‌گیرد).

اگر به یک فاصله بااهمیت نیاز دارید، مثلاً در نام پرونده‌ای که به یک کلید ارسال می‌شود، نمی‌توانید این کار را انجام دهید:

accepter: ssl(CA=/etc/ser2net/my CA/),tcp,3000

زیرا پردازش پذیرنده آرگومان‌ها را از محل فاصله تفکیک می‌کند و متوجه نخواهد شد که "/CA" چیست. همچنین نمی‌توانید این کار را انجام دهید:

accepter: ssl(CA="/etc/ser2net/my CA/"),tcp,3000

زیرا YAML نقل‌قول‌ها را حذف می‌کند، بنابراین این مورد از نظر عملکرد معادل مثال قبلی است. و عبارت زیر:

accepter: ssl(CA="/etc/ser2net/my\ CA/"),tcp,3000

نیز کار نخواهد کرد، درون نقل‌قول دوتایی YAML مقدار "\ " را به یک فاصله تبدیل می‌کند. شما چند گزینه دارید. می‌توانید بنویسید:

accepter: ssl(CA=/etc/ser2net/my\ CA/),tcp,3000

یا:

accepter: ssl(CA='/etc/ser2net/my\ CA/'),tcp,3000

زیرا در خارج از نقل‌قول، YAML مقدار "\ " را پردازش نمی‌کند و آن را در نقل‌قول‌های تکی نیز پردازش نخواهد کرد. یا اگر فاصله‌ها یا دو‌نقطه‌های زیادی نیز دارید، می‌توانید انجام دهید:

accepter: ssl(CA="\"/etc/ser2net/my CA/\""),tcp,3000

زیرا درون نقل‌قول‌های بیرونی، YAML مقدار '\"' را به یک '"' تبدیل می‌کند و آن را به پردازش پذیرنده ارسال می‌کند که نقل‌قول‌ها را همان‌طور که انتظار دارید تفسیر خواهد کرد.

رسیدگی به UDP کمی متفاوت از آن چیزی است که ممکن است تصور کنید، زیرا برای ser2net سخت است که بداند داده‌ها را به کجا ارسال کند. برای مدیریت این موضوع، درگاه‌های UDP همچنان مفهوم "اتصال" را دارند. اگر یک درگاه UDP متصل نباشد، در صورت دریافت یک بسته، نشانی راه دور برای آن بسته به عنوان انتهای راه دور "اتصال" تنظیم می‌شود. این درگاه تمام عملیات اتصال جدید عادی را انجام خواهد داد. ser2net اتصالات جدید را تا سقف "max-connections" می‌پذیرد و سپس بسته‌های نشانی‌های دیگر را تا زمانی که قطع اتصال رخ دهد نادیده می‌گیرد.

متأسفانه هیچ راه آسانی برای دانستن زمان قطع اتصال وجود ندارد. شما دو گزینه اساسی دارید:

  • یک مهلت زمانی (timeout) تنظیم کنید، اگر تا قبل از اتمام مهلت زمانی پاسخی از انتهای راه دور دریافت نشود، درگاه قطع می‌شود و مورد دیگری می‌تواند متصل شود. این بدان معناست که هر چیزی که از درگاه استفاده می‌کند باید به طور دوره‌ای یک بسته (بسته خالی مشکلی ندارد) به ser2net ارسال کند تا اتصال زنده بماند.
  • از گزینه kickolduser روی درگاه استفاده کنید؛ هر اتصال جدیدی که وارد شود جایگزین اتصال قبلی خواهد شد.

توجه داشته باشید که درگاه‌های UDP اتصالات چندگانه را درست مانند درگاه‌های TCP مدیریت می‌کنند، بنابراین می‌توانید چندین شنونده UDP داشته باشید.

شما یک گزینه سوم نیز دارید. اگر یک نشانی راه دور (remaddr) با یک درگاه غیرصفر و یک درگاه اتصال معکوس تنظیم کنید (به بحث در مورد نشانی‌های راه دور در بالا مراجعه کنید)، ser2net یکی از اتصالات را می‌گیرد و آن را به طور دائم به آن درگاه اختصاص می‌دهد. این مورد یک نشانی راه دور ثابت (fixed remote address) نامیده می‌شود. تمام ترافیک دستگاه به آن درگاه ارسال خواهد شد. هر نشانی راه دور ثابت روی یک درگاه UDP باید یک اتصال متناظر داشته باشد، بنابراین اگر ۳ نشانی راه دور ثابت دارید، باید حداقل ۳ اتصال داشته باشید.

همان‌طور که پیش‌تر ذکر شد، می‌توانید max-connections=<n> را روی یک درگاه تنظیم کنید تا بیش از یک اتصال همزمان به یک درگاه سریال یکسان مجاز باشد. این اتصالات تمام تنظیمات را به اشتراک خواهند گذاشت. شما نمی‌توانید دو درگاه TCP جداگانه داشته باشید که به طور همزمان به یک درگاه متصل شوند.

این امر تعاملات قابل توجهی با سایر ویژگی‌ها دارد:

کنترل جریان (flow control) دقیقاً یک ویژگی نیست، بلکه بیشتر یک تعامل بین اتصالات مختلف است. اگر یک درگاه TCP دریافت داده از ser2net را متوقف کند، تمام درگاه‌های TCP متصل مشمول کنترل جریان خواهند شد. این بدان معناست که یک اتصال TCP منفرد می‌تواند تمام اتصالات دیگر را متوقف کند.

closeon هنگامی که توالی closeon مشاهده شود، تمام اتصالات را خواهد بست.

openstr تنها زمانی ارسال می‌شود که درگاه متصل نباشد و اولین اتصال برقرار گردد.

closestr تنها زمانی ارسال می‌شود که آخرین درگاه قطع شود و هیچ اتصال دیگری به درگاه وجود نداشته باشد.

هر گونه پایشگر (دستور "monitor start" از اتصالات کنترلی) ورودی را از تمام اتصالات شبکه دریافت خواهد کرد.

kickolduser اگر اتصالی روی درگاهی وارد شود که در حال حاضر حداکثر تعداد اتصالات را دارد، یکی از اتصالات موجود را بیرون می‌اندازد. اتصال اخراج‌شده به صورت دلخواه انتخاب می‌شود و الگوریتم آن ممکن است تغییر کند.

ردگیری (tracing) داده‌ها را از تمام اتصالات شبکه ردگیری می‌کند.

rfc2217 (کنترل سریال راه دور با تلنت) تنظیمات اتصال را روی دستگاه تغییر می‌دهد و از هر اتصال شبکه‌ای پذیرفته می‌شود.

بازپیکربندی با SIGHUP (reconfig on SIGHUP) برای جزئیات به بخش "SIGHUP" در ser2net(8) مراجعه کنید.

چرخاننده (ROTATOR) تنها در صورتی یک درگاه را انتخاب می‌کند که هیچ اتصالی روی آن درگاه وجود نداشته باشد. توجه داشته باشید که استفاده از چرخاننده با درگاهی که دارای max-connections > 1 باشد منجر به رفتار تعریف‌نشده خواهد شد.

مهلت زمانی (timeout) به ازای هر درگاه TCP خواهد بود و فقط همان درگاه TCP را در هنگام اتمام مهلت زمانی قطع می‌کند.

telnet_brk_on_sync یک وقفه (break) برای هر درگاه TCP که sync انجام دهد ارسال می‌کند.

showport در رابط مدیریتی تمام اتصالات ممکن را نشان می‌دهد، بنابراین اگر مقدار max-connections=3 را تعیین کنید سه ورودی دریافت خواهید کرد.

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

برنامه ser2net از رابط tcp wrappers برای پیاده‌سازی امنیت مبتنی بر میزبان استفاده می‌کند. برای شرح تنظیمات پرونده به hosts_access(5) مراجعه کنید. دو دیمن توسط ser2net استفاده می‌شوند: "ser2net" برای درگاه‌های داده و "ser2net-control" برای درگاه‌های کنترلی است.

برنامه ser2net از رمزنگاری SSL با استفاده از ssl gensio پشتیبانی می‌کند. برای فعال کردن رمزنگاری، از پذیرنده‌ای مانند زیر استفاده کنید:

telnet,ssl,tcp,1234

سپس می‌توانید از gensiot برای اتصال استفاده کنید:

gensiot telnet,ssl,<server>,1234

یا می‌توانید telnet-ssl را نصب کرده و دستور زیر را اجرا کنید:

telnet -z ssl,secure <server> 1234

اتصال SSL با استفاده از کلیدهای ارائه‌شده برقرار می‌شود. در این مثال ser2net از کلیدهای پیش‌فرض استفاده می‌کند (همان‌طور که در پیش‌فرض‌ها تنظیم شده است، آن‌ها را در زیر ببینید). همچنین می‌توانید آن‌ها را با استفاده از (key=<keyfile>,cert=<certfile>) پس از ssl در بالا تنظیم کنید، یا پیش‌فرض‌ها را اصلاح نمایید.

اگر گواهی‌های معتبر از یک مرجع صدور گواهی (CA) ندارید، اتصال به دلیل شکست گواهی ناموفق خواهد بود. دریافت گواهی از این طریق بسیار دشوار است، بنابراین راه دیگری وجود دارد. می‌توانید این کار را انجام دهید:

gtlssh-keygen --keydir /etc/ser2net --commonname "`hostname`-ser2net" serverkey ser2net

تا کلیدهای پیش‌فرض را در etc/ser2net/ (یا هر جای دیگر) تولید کنید. گواهی/کلید با نام etc/ser2net/ser2net.crt|key/ نام‌گذاری خواهند شد.

نکته: اگر خودتان ser2net را کامپایل کنید، به طور پیش‌فرض autoconf پوشه پیکربندی سیستم (معمولاً etc/) را به عنوان usr/etc/ تنظیم می‌کند. این یک دردسر بزرگ در autoconf است. بنابراین اگر آن را تغییر ندهید، در بخش بالا که etc/ گفته شده است به usr/etc/ نیاز خواهید داشت. با این حال، معمولاً روش درست این است که هنگام پیکربندی ser2net عبارت "sysconfdir=/etc--" را به خط فرمان configure اضافه کنید. اگر یک توزیع ser2net را برای شما کامپایل کرده باشد، باید این کار را به طور پیش‌فرض انجام داده باشد، بنابراین در این حالت جای نگرانی نیست.

سپس ser2net.crt را به سیستم کاربر کپی کرده و آن را به دستورات اتصال ارائه دهید، مانند:

gensiot telnet,ssl(CA=ser2net.crt),<server>,1234

یا:

telnet -z ssl,secure,cacert=ser2net.crt 1234

سپس یک اتصال رمزنگاری‌شده خواهید داشت. فقط مطمئن شوید که گواهی‌های شما معتبر هستند.

توجه داشته باشید که عبارت "ser2net-" در انتهای کلید مهم است زیرا نام موضوع (subject name) گواهی را یکتاتر می‌کند. شما واقعاً می‌توانید هر متنی را که می‌خواهید به keygen ارائه دهید، تا زمانی که نام آن را به درستی تغییر دهید. آن مقدار نام موضوع گواهی خواهد بود.

برنامه ser2net روشی برای احراز هویت با SSL فراهم می‌کند. این روش بهترین نیست، اما کار می‌کند. شما باید clientauth را روی ssl فعال کنید:

telnet,ssl(clientauth),tcp,1234

یا آن را در پیش‌فرض تنظیم کنید. سپس باید یک گواهی با نام کاربری به عنوان نام مشترک (common name) ایجاد کنید. می‌توانید این کار را با دستور زیر انجام دهید:

gtlssh-keygen --keydir outdir --commonname username keygen keyname

که keyname.crt و keyname.key را در outdir تولید می‌کند. سپس keyname.crt را در پوشه <authdir>/username/allowed_certs در ser2net قرار دهید. به طور پیش‌فرض <authdir> برابر با usr/share/ser2net/auth/ است، اما می‌توانید آن را با پیش‌فرض authdir در پرونده پیکربندی ser2net یا با تنظیم authdir روی تک تک اتصالات تغییر دهید (در صورتی که مقادیر متفاوتی برای درگاه‌های مختلف بخواهید). سپس باید پوشه allowed_certs را مجدداً هش (rehash) کنید:

gtlssh-keygen rehash <authdir>/username/allowed_certs

سپس ser2net را مجدداً راه‌اندازی/بارگذاری کنید و از یکی از این خطوط بسیار طولانی برای telnet به آن استفاده کنید:

gensiot telnet,ssl(CA=ser2net.crt,cert=username.crt,key=username.key),<server>,1234

telnet -z ssl,secure,cacert=ser2net.crt,cert=username.crt,key=username.key server 1234

تمام موارد فوق دردسر بزرگی است. خوشبختانه راه ساده‌تری وجود دارد. ابزار gtlssh برنامه‌ای شبیه به ssh است، اما روی TLS اجرا می‌شود و یک پروتکل احراز هویت شبیه به ssh را با استفاده از certauth gensio پیاده‌سازی می‌کند.

برنامه ser2net از این سیستم احراز هویت که روی gensioهای ssl و certauth اجرا می‌شود پشتیبانی می‌کند. آن gensioها چارچوب مدیریت احراز هویت را فراهم می‌کنند و خود ser2net آن را کنترل می‌کند.

این روش از همان authdir و پوشه کلیدهای مجاز مانند قبل استفاده می‌کند و همچنان به یک گواهی سرور نیاز دارد، اما گواهی خودامضاشده (self-signed) ایجادشده با gtlssh-keygen بدون انجام کار خاصی به خوبی کار می‌کند. عبارت certauth را به سطر درگاه اضافه کنید:

telnet,mux,certauth,ssl,tcp,1234

و *اطمینان حاصل کنید* که clientauth برای ssl غیرفعال است (وگرنه ssl همچنان تلاش خواهد کرد کلاینت را احراز هویت کند). غیرفعال بودن حالت پیش‌فرض است، اما در صورتی که پیش‌فرض را تغییر داده باشید...

ورودی mux به این دلیل است که gtlssh از mux gensio برای امکان چندین کانال روی یک نشست یکسان استفاده می‌کند. این ورودی در نسخه‌های قدیمی‌تر (قبل از 1.2) gtlssh وجود نداشت، اما برای نسخه‌های جدیدتر الزامی است. برنامه gtlssh همچنین یک گزینه --nomux برای احتیاط دارد.

برنامه gtlssh مدیریت گواهی‌های خود را انجام می‌دهد. برای جزئیات در این مورد به صفحه راهنمای gtlssh نگاه کنید. گواهی gtlssh را بردارید و آن را در پوشه authdir/username/allowed_certs قرار دهید و مانند قبل آن را rehash کنید. ابزار gtlssh از نام مشترک ارائه‌شده در گواهی استفاده *نخواهد کرد*، بلکه از نام کاربری ارائه‌شده توسط gtlssh استفاده می‌کند. سپس با gtlssh متصل شوید:

gtlssh --nosctp --telnet username@server 1234

گزینه nosctp-- مانع از تلاش gtlssh برای استفاده از sctp می‌شود که با شکست مواجه خواهد شد زیرا ما tcp را در سطر درگاه قرار دادیم. شما می‌توانید از sctp در آنجا استفاده کنید و تمام مزایای آن را به رایگان دریافت کنید! در این صورت nosctp-- دیگر برای جلوگیری از پیام‌ها لازم نخواهد بود.

اگر نام کاربری با کاربر فعلی شما یکسان باشد، اختیاری است. اگر قبلاً به آن سرور/درگاه متصل نشده‌اید، gtlssh از شما می‌خواهد آن را تأیید کنید، درست همان‌طور که ssh انجام می‌دهد. اگر گواهی‌ها، نشانی IP و غیره تغییر کنند، gtlssh این موضوع را به شما اطلاع خواهد داد.

اگر نمی‌خواهید از گواهی استفاده کنید (گواهی‌ها قطعاً ترجیح داده می‌شوند، اما ممکن است همیشه قابل استفاده نباشند) می‌توانید از ورود با گذرواژه نیز استفاده کنید. برای کارکرد گذرواژه‌ها باید enable-password را در گزینه‌های certauth gensio تنظیم کنید. هنگامی که با gtlssh متصل می‌شوید، اگر اعتبارسنجی گواهی ناموفق باشد، از شما گذرواژه خواسته می‌شود. احراز هویت گذرواژه را می‌توان به دو روش مختلف انجام داد. هر دو بسته به اینکه pamauth تنظیم شده باشد یا خیر، متقابلاً منحصر به فرد هستند:

  • برای احراز هویت با استفاده از کتابخانه PAM، نام سرویس PAM را از طریق گزینه pamauth تنظیم کنید.
  • یک گذرواژه در authdir/username/password قرار دهید. اگر با اولین سطر در پرونده گذرواژه مطابقت داشته باشد و pamauth تنظیم نشده باشد، احراز هویت موفق خواهد شد.

چرخاننده‌ها یک حالت خاص هستند. مراقب باشید. یک چرخاننده احراز هویت مخصوص به خود را دارد. اگر احراز هویت را روی درگاهی که بخشی از یک چرخاننده است تنظیم کنید، احراز هویت آن درگاه استفاده نمی‌شود. فقط احراز هویت چرخاننده استفاده می‌شود.

برنامه ser2net انتظار دارد گواهی‌های پیش‌فرض و کلیدهای عمومی در etc/ser2net/ قرار داشته باشند و این موارد به عنوان پیش‌فرض‌های gensio تنظیم شده‌اند. این بدان معناست که هر اتصال خروجی از ser2net، چه در یک connector و چه در یک connback، از این کلیدها استفاده خواهد کرد. اگر آن‌ها وجود نداشته باشند یا منقضی شده باشند یا مشکلی داشته باشند، خطاهای گیج‌کننده‌ای در مورد عدم امکان باز کردن گواهی‌ها دریافت خواهید کرد.

برای حل این مشکل، می‌توانید با افزودن "=cert" به مشخصات gensio برای ssl و certauth در اتصالات خروجی، گواهی‌ها را غیرفعال کنید. این کار گواهی‌ها را برای gensio خاص غیرفعال می‌کند و احتمالاً همان چیزی است که می‌خواهید. اگر در حال برقراری اتصال و احراز هویت در سرور راه دور هستید، گواهی و کلید خصوصی پیش‌فرض احتمالاً آن چیزی نیستند که می‌خواهید.

اگر ser2net سیگنال SIGHUP را دریافت کند، پرونده پیکربندی خود را دوباره می‌خواند و تغییرات مناسب را اعمال می‌کند. اگر یک درگاه در حال استفاده تغییر کرده یا حذف شود، تغییر واقعی تا زمان قطع اتصال درگاه رخ نخواهد داد.

تقریباً تمام خروجی‌های خطا به syslog ارسال می‌شوند، نه به خروجی استاندارد.

/etc/ser2net/ser2net.yaml, /etc/ser2net/ser2net.key, /etc/ser2net/ser2net.crt, /usr/share/ser2net

ser2net(8), telnet(1), hosts_access(5), gensio(5), gtlssh(1), gtlssh-keygen(1)

اگر شناخته‌شده بودند، برطرف می‌شدند :).

Corey Minyard <minyard@acm.org>

06/02/01