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

همون‌طور که می‌دونیم، شبکه بر اساس مدل OSI کار می‌کنه که ۷ تا لایه داره. لایه‌ی سومش Network هست و مهم‌ترین چیز توی این لایه، آدرس IPـه. به زبون ساده، وقتی از «مسیر‌یابی» یا Routing حرف می‌زنیم، داریم درباره‌ی همین لایه صحبت می‌کنیم. چون هر بسته‌ی شبکه یه Source IP (آدرس فرستنده) و یه Destination IP (آدرس گیرنده) داره و مسیر حرکتش بر اساس همین‌ها مشخص می‌شه. برای همین هر دستگاهی که به شبکه وصل می‌شه، نیاز به یه مؤلفه‌ی لایه‌ی ۳ یعنی آدرس آی‌پی داره؛ یعنی یک IP به همراه Subnet Mask (مثلاً ‎192.168.10.15 / 255.255.255.0‎) یا همون نتورک (‎192.168.10.15/24).

آدرس IP هم دو نسخه داره: IPv4 و IPv6. IPv4 خودش چند دسته‌بندی داره و دو گروه مهمش Private و Public هستن. اگر خواستی عمیق‌تر واردش شی، RFC1918 خیلی خوب توضیح داده.

حالا یه سؤال مهم پیش میاد: اگه End-user ما (مثل یه سرور لینوکسی، کامپیوتر خونگی یا لپ‌تاپ) بخواد به یه مقصدی وصل بشه، دقیقاً چه اتفاقی می‌افته؟
مثلاً فرض کن سرور لینوکسی می‌خواد برای آپدیت یکی از پکیج‌ها به یه ریپازیتوری وصل بشه و نسخه‌ی جدید رو دانلود کنه. یا یه کامپیوتر ویندوزی بخواد به گوگل وصل بشه و یه چیزی سرچ کنه.

اولین کاری که سیستم انجام می‌ده اینه که از DNS کمک می‌گیره تا دامنه‌ی google.com رو تبدیل کنه به IP. چون توی شبکه، چیزی که مسیر‌یابی می‌شه IPـه، نه اسم دامنه.
بعد از اینکه IP مقصد مشخص شد، سیستم می‌گرده ببینه آیا مسیری برای رسیدن به اون IP داره یا نه؛ یعنی توی Routing Table خودش بررسی می‌کنه که “از چه راهی باید برم؟”

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

اما فرض کن توی Routing Table سرور ما هیچ مسیری برای رسیدن به گوگل (مثلاً ‎216.239.38.120) تعریف نشده. این موقع چی می‌شه؟ آیا دیگه هیچ شانسی برای دسترسی به گوگل نداره؟ حالا اگر فقط گوگل نبود چی؟ مثلاً کاربر بخواد به گوگل، یاهو میل و چند سایت دیگه وصل بشه. تکلیف چیه؟

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

برای مدیریت تنظیمات شبکه توی لینوکس، معمولاً دو مجموعه ابزار داریم: net-tools و iproute2.
net-tools قدیمی‌تره و توسعه‌اش متوقف شده، ولی iproute2 نسخه‌ی جدیدتر و پیش‌فرض اکثر توزیع‌ها مثل Debian و Fedora و … است.

البته اینکه net-tools قدیمیه، معنیش این نیست که نتونیم ازش استفاده کنیم؛ فقط ممکنه توی بعضی توزیع‌ها نصب نباشه و خودمون باید نصبش کنیم.

نصب net-tools

نصب روی Debian:

sudo apt install net-tools -y
 
روی RedHat:
sudo yum install net-tools -y
 
:به عنوان مثال
 

Net-Tools

 net-tools حالا بریم سراغ دستورات مهم

ifconfig

این دستور آی پی های تنظیم شده بر روی کارت‌های شبکه را نمایش می‌دهد.

route -n

این دستور جدول روتینگ شبکه رو نمایش میده. 

در خروجی،  سطری که مقدار Destination را 0.0.0.0 نمایش میدهد Gateway تجهیز میباشد.

Default gateway اضافه کردن

sudo route add default gw 192.168.1.1
:اگه لینوکس چند کارت شبکه داشته باشه، می‌تونیم اینترفیسش رو هم مشخص کنیم 
sudo route add default gw 192.168.1.1 eth0
 
 Default Gateway برای حذف 
sudo route del default gw 192.168.1.1
نکته مهم

آی پی که قصد تعریف اون رو به عنوان گیت وی داریم برای لینوکس در دسترس (Reachable) باشه در غیر اینصورت به ما پیام خطا نشون داده میشه.

Iproute2

:نمایش آی پی های کارت های شبکه
ip a
ip addr show
 
:این دستور وضعیت روتینگ تیبل رو در لینوکس به ما نشون میده
ip route show
ip r

توی این دستور خطی که عبارت default رو نوشته یعنی در واقع همون گیت وی ما هستش.

برای اضافه کردن Default Gateway

در صورتی که لینوکس ما چند کارت شبکه داشته باشه میتونیم اینترفیسش رو هم بهش بدیم

sudo ip route add default via 192.168.1.1
sudo ip route add default via 192.168.1.1 dev eth0
حذف دیفالت گیت وی
sudo ip route del default via 192.168.1.1
نکته خیلی مهم: این تغییرات موقتی هستن؛ یعنی مستقیم روی کرنل اعمال میشن و تو فایل کانفیگ سیستم ذخیره نمشن به عبارت دیگه اگه سیستم ریبوت بشه ، تنظیمات پاک میشن؛ برای دائمی شدن باید تو فایل تنظیمات شبکه اعمالشون کنیم و سرویس شبکه رو مجدد باز راه اندازی (ری استارت) کنیم.

nmcli

یکی از ساده ترین راه ها برای اعمال تنظیمات دائمی تنظیمات، استفاده از nmcli است.

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

nmcli connection show
nmcli device status

بعد از اینکه اینترفیس خروجی (مورد نظرمون) رو انتخاب کردیم (به عنوان مثال من ens160 رو انتخاب میکنم) کافیه که gateway رو براش تنظیم کنیم:

udo nmcli connection modify Wired connection 1 ipv4.gateway 172.16.26.254

 

و  در آخر همونطور که گفتیم اینترفیس رو باز راه اندازی کنیم. (ری استارت)

sudo nmcli connection up Wired connection 1