اگر هنگام تنظیم IP، Gateway، Route، VLAN، Tunnel یا شبکه سرور لینوکسی با خطای RTNETLINK answers: File exists روبهرو شدهاید، معمولاً Kernel میگوید چیزی که قصد اضافهکردنش را دارید از قبل وجود دارد یا با یک Route، Address یا Interface موجود تداخل دارد.
پاسخ سریع: قبل از حذف هر چیزی، وضعیت فعلی را با ip route show، ip address show و در صورت استفاده از Policy Routing با ip rule show بررسی کنید. اگر Route از قبل وجود دارد، بهجای اضافهکردن دوباره آن، Route موجود را اصلاح کنید یا در صورت مناسب بودن از ip route replace استفاده کنید.
RTNETLINK answers: File exists یعنی چه؟
RTNETLINK رابطی است که ابزارهایی مانند ip برای صحبت با بخش Networking کرنل Linux استفاده میکنند. وقتی دستور شما قصد ایجاد یک Route، Address یا Network Object را دارد که Kernel آن را موجود یا متعارض تشخیص میدهد، ممکن است پاسخ زیر را دریافت کنید:
RTNETLINK answers: File exists
این خطا الزاماً به یک فایل واقعی روی دیسک مربوط نیست. عبارت File exists نمایش خطای EEXIST است و Object موردنظر میتواند یک Route، IP Address، Link یا Tunnel باشد.
رایجترین سناریو: Route از قبل وجود دارد
فرض کنید این دستور را اجرا میکنید:
sudo ip route add 10.20.0.0/24 via 192.168.1.1 dev eth0
اگر Route معادل از قبل در جدول Routing وجود داشته باشد، ممکن است با خطای File exists روبهرو شوید.
ابتدا Routeها را ببینید:
ip route show
برای IPv6:
ip -6 route show
مرحله ۱: Route دقیق مقصد را پیدا کنید
اگر مقصد موردنظر 10.20.0.0/24 است:
ip route show 10.20.0.0/24
یا کل Routing Table را بررسی کنید:
ip route show table all
این مرحله مهم است، چون Route ممکن است در Table دیگری غیر از main قرار داشته باشد.
مرحله ۲: مسیر واقعی یک IP را بررسی کنید
برای اینکه ببینید Kernel برای یک مقصد خاص چه Routeای انتخاب میکند:
ip route get 10.20.0.10
این دستور Route مؤثر را Resolve میکند و برای تشخیص Gateway و Interface واقعی بسیار کاربردی است.
مرحله ۳: استفاده از ip route replace بهجای add
اگر هدف شما این است که Route موجود را اصلاح کنید یا در صورت نبودن آن ایجاد شود، میتوانید در سناریوی مناسب از replace استفاده کنید:
sudo ip route replace 10.20.0.0/24 via 192.168.1.1 dev eth0
طبق مستندات iproute2، تفاوت به این شکل است:
🔹 ip route add: Route جدید اضافه میکند.
🔹 ip route change: Route موجود را تغییر میدهد.
🔹 ip route replace: Route را تغییر میدهد یا اگر وجود ندارد ایجاد میکند.
⚠️ روی VPS Remote، قبل از تغییر Default Route یا Gateway با replace مطمئن شوید مسیر SSH شما قطع نمیشود. یک Route اشتباه میتواند دسترسی سرور را فوراً از بین ببرد.
خطا هنگام اضافهکردن Default Route
برای مثال:
sudo ip route add default via 192.168.1.1 dev eth0
اگر Default Route از قبل وجود داشته باشد، ابتدا آن را ببینید:
ip route show default
ممکن است خروجی چیزی شبیه این باشد:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.10 metric 100
در این حالت اضافهکردن دستی همان Default Route معمولاً ضرورتی ندارد.
DHCP و Static Route همزمان
یکی از علتهای رایج این خطا این است که Interface از DHCP استفاده میکند و DHCP خودش Gateway و Route را ساخته است، اما شما همان Route را دوباره در Netplan یا Script دستی تعریف کردهاید.
ابتدا وضعیت Interface را بررسی کنید:
ip address show
ip route show
روی Ubuntu جدید:
netplan status --all
خطای RTNETLINK در Netplan
اگر خطا هنگام اجرای دستور زیر ظاهر میشود:
sudo netplan apply
احتمال دارد Route یا Gateway در بیش از یک محل تعریف شده باشد.
کانفیگ Merge شده Netplan را ببینید:
sudo netplan get
فایلها را نیز بررسی کنید:
ls -l /etc/netplan/
sudo grep -R "routes:\|gateway4:\|gateway6:\|to: default\|0.0.0.0/0" /etc/netplan/
نمونه صحیح Default Route در Netplan
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.10/24
routes:
- to: default
via: 192.168.1.1
metric: 100
Netplan از تعریف Routeهای Static و Policy Routing پشتیبانی میکند. در یک Routing Table، Default Routeهای متعارض باید با دقت مدیریت شوند. :chatgpt-content-reference{index=”1″}
روی VPS Remote از netplan try استفاده کنید
اگر از راه دور به سرور متصل هستید، بهجای Apply مستقیم تنظیمات شبکه میتوانید ابتدا از:
sudo netplan try
استفاده کنید. Netplan تنظیم را موقتاً اعمال میکند و اگر آن را در زمان مشخص تأیید نکنید، برای جلوگیری از Lockout تلاش میکند تنظیم قبلی را برگرداند. :chatgpt-content-reference{index=”2″}
⚠️ حتی با netplan try نیز برای سرور Production بهتر است Console یا روش بازیابی خارج از SSH در دسترس داشته باشید. تغییر اشتباه IP، Gateway یا Route میتواند اتصال Remote را قطع کند.
خطا هنگام ip address add
RTNETLINK فقط مربوط به Routing نیست. ممکن است هنگام افزودن IP هم دیده شود:
sudo ip address add 192.168.1.10/24 dev eth0
ابتدا IPهای Interface را بررسی کنید:
ip address show dev eth0
مستندات iproute2 برای Address نیز فرمانهای add، change و replace را در اختیار قرار میدهند. :chatgpt-content-reference{index=”3″}
Route خودکار ناشی از IP Address
وقتی IP با Prefix روی Interface قرار میدهید، Kernel معمولاً Route مربوط به همان Subnet را نیز بهصورت خودکار ایجاد میکند.
مثلاً:
sudo ip address add 192.168.50.10/24 dev eth0
ممکن است Kernel خودش Route شبکه زیر را ایجاد کند:
192.168.50.0/24 dev eth0 proto kernel scope link
در این وضعیت، تلاش برای اضافهکردن دوباره Route مشابه میتواند غیرضروری یا متعارض باشد.
روی VPS تنظیمات شبکه سفارشی دارید؟
Static Route، چند IP، Tunnel، Docker Network و Policy Routing میتوانند Routing Table سرور را پیچیده کنند. قبل از تغییر Gateway یا Route اصلی، بهتر است مسیر SSH و Routeهای فعال دقیق بررسی شوند.
تماس با پشتیبانی ایرانیکاسرور:
021-91302467
Policy Routing را فراموش نکنید
اگر سرور چند IP، چند Gateway یا چند Interface دارد، ممکن است Route در Table دیگری باشد.
Ruleها را ببینید:
ip rule show
و همه Tableها:
ip route show table all
اگر Route را در Table سفارشی اضافه میکنید، Table را صریح مشخص کنید:
sudo ip route add 10.20.0.0/24 via 192.168.1.1 dev eth0 table 100
چند Default Route با Metric متفاوت
اگر واقعاً چند Gateway دارید، Routeها باید طراحی مشخصی داشته باشند. برای مثال:
default via 192.168.1.1 dev eth0 metric 100
default via 192.168.2.1 dev eth1 metric 200
Route با Metric پایینتر ترجیح بیشتری دارد. Netplan نیز برای سناریوهای چند Gateway امکان تعریف Metric یا Routing Table مجزا را فراهم میکند. :chatgpt-content-reference{index=”4″}
بررسی NetworkManager
اگر سیستم از NetworkManager استفاده میکند، ممکن است Route داخل Connection Profile تعریف شده باشد و شما همان Route را دستی دوباره اضافه کنید.
Connectionها را ببینید:
nmcli connection show
Routeهای یک Connection:
nmcli connection show "CONNECTION_NAME"
NetworkManager نیز Route یکسان را بهعنوان Route از قبل شناختهشده تشخیص میدهد. :chatgpt-content-reference{index=”5″}
خطا هنگام ساخت Tunnel یا Interface
اگر خطا بعد از دستوری مثل ip link add رخ میدهد، ممکن است Interface یا Tunnel با همان مشخصات از قبل وجود داشته باشد.
Interfaceها را ببینید:
ip link show
برای Interface خاص:
ip link show tun0
در Tunnelها فقط نام Interface مطرح نیست؛ ممکن است ترکیب Endpoint یا پارامترهای Kernel نیز Conflict ایجاد کند.
آیا باید Route قبلی را حذف کنیم؟
فقط اگر مطمئن هستید Route موجود اشتباه است.
مثال:
sudo ip route del 10.20.0.0/24 via 192.168.1.1 dev eth0
بعد میتوانید Route درست را اضافه کنید.
⚠️ روی سرور Remote، Default Route را قبل از اطمینان از مسیر جایگزین حذف نکنید. حذف Gateway اصلی ممکن است همان لحظه Session SSH را قطع کند.
از ip route flush برای رفع سریع استفاده کنیم؟
روی VPS Remote معمولاً خیر. فرمانهای Flush میتوانند تعداد زیادی Route را همزمان پاک کنند.
مثلاً اجرای کورکورانه این نوع فرمان:
ip route flush table main
میتواند شبکه سرور را مختل کند. Route مشکلدار را دقیق شناسایی و فقط همان مورد را اصلاح کنید.
Script شبکه دوبار اجرا میشود
گاهی مشکل از این است که Route یک بار توسط Netplan، NetworkManager یا systemd-networkd ساخته میشود و بار دوم توسط Script شما.
برای مثال یک Script Boot شامل:
ip route add 10.20.0.0/24 via 192.168.1.1
اگر هر بار بدون بررسی اجرا شود، اجرای دوم ممکن است Fail شود.
برای عملیات Idempotent در شرایطی که semantics آن برای شما مناسب است، میتوانید از:
ip route replace 10.20.0.0/24 via 192.168.1.1 dev eth0
استفاده کنید یا قبل از Add وجود Route را بررسی کنید.
چکلیست سریع رفع خطا
| سناریو | اولین بررسی |
|---|---|
| ip route add خطا میدهد | ip route show table all |
| Default Gateway اضافه نمیشود | ip route show default |
| ip address add خطا میدهد | ip address show dev INTERFACE |
| netplan apply خطا میدهد | netplan get و بررسی Routeهای تکراری |
| چند Gateway دارید | Metric، Table و ip rule |
| خطا در Tunnel یا Link | ip link show |
ترتیب امن عیبیابی
۱. خروجی ip address show را ذخیره کنید.
۲. خروجی ip route show table all را بررسی کنید.
۳. با ip rule show Policy Routing را بررسی کنید.
۴. مشخص کنید Route از DHCP، Netplan، NetworkManager یا Script آمده است.
۵. Route یا Address تکراری را شناسایی کنید.
۶. در صورت نیاز به تغییر Route موجود از replace یا اصلاح Config دائمی استفاده کنید.
۷. روی VPS Remote تغییرات Netplan را ترجیحاً با netplan try آزمایش کنید.
پرسشهای متداول
RTNETLINK answers: File exists دقیقاً یعنی چه؟
یعنی عملیات Networking درخواست ایجاد Objectی را داده که Kernel آن را موجود یا متعارض تشخیص داده است. این Object میتواند Route، Address، Interface یا Tunnel باشد.
فرق ip route add و replace چیست؟
add Route جدید ایجاد میکند، ولی replace Route موجود را تغییر میدهد و اگر وجود نداشته باشد آن را ایجاد میکند.
چرا Default Route را نمیتوانم اضافه کنم؟
ممکن است DHCP، Netplan یا NetworkManager قبلاً Default Route را ساخته باشد. ابتدا ip route show default را بررسی کنید.
آیا پاککردن Route مشکل را حل میکند؟
فقط اگر Route موجود اشتباه باشد. روی سرور Remote حذف Default Route میتواند اتصال SSH را قطع کند؛ بنابراین ابتدا Route جایگزین و مسیر دسترسی را بررسی کنید.
چرا بعد از Reboot خطا دوباره برمیگردد؟
احتمالاً Route تکراری در Config دائمی مانند Netplan، NetworkManager، cloud-init یا یک Startup Script تعریف شده است. تغییر موقت Routing Table بدون اصلاح منبع اصلی بعد از Reboot از بین میرود.
آیا ip route flush راهحل خوبی است؟
برای VPS Remote معمولاً خیر. Flush ممکن است Routeهای ضروری را حذف و شبکه سرور را قطع کند. بهتر است فقط Route مشکلدار اصلاح شود.
منابع رسمی
🔹 مستندات ip-route در iproute2
🔹 مستندات ip-address در iproute2
🔹 مستندات netplan try و Rollback تنظیمات شبکه
جمعبندی
برای رفع RTNETLINK answers: File exists ابتدا Route، Address یا Interface موجود را پیدا کنید. بیشتر مواقع مشکل از اضافهکردن دوباره Route یا Gateway، تداخل DHCP با Static Config یا اجرای تکراری Script شبکه است. بهجای پاکسازی گسترده Routing Table، فقط Object متعارض را اصلاح کنید و روی سرور Remote قبل از هر تغییر شبکه مسیر بازیابی را در نظر بگیرید.
خطای RTNETLINK هنوز برطرف نشده است؟
اگر سرور چند IP، Gateway، Tunnel یا Route سفارشی دارد و نمیخواهید با تغییر اشتباه دسترسی SSH قطع شود، میتوانید برای بررسی Routing Table و تنظیمات شبکه درخواست فنی ثبت کنید.
تماس با پشتیبانی ایرانیکاسرور:
021-91302467






دیدگاهها (۰)