অনুরোধ করা আইপি ঠিকানা অন্য (অক্ষম) ইন্টারফেসের সাথে যুক্ত থাকলে লিনাক্স এআরপি অনুরোধ বার্তাগুলির জবাব দেয় না


9

আমি একটি পিসি (কার্নেল আছে 3.2.0-23-জেনেরিক ) যা করেছে 192.168.1.2/24করার জন্য কনফিগার eth0ইন্টারফেস এবং ব্যবহার 192.168.1.1এবং 192.168.1.2জন্য অ্যাড্রেস tun0ইন্টারফেস:

root@T42:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:41:54:01:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 scope global eth0
    inet6 fe80::216:41ff:fe54:193/64 scope link
       valid_lft forever preferred_lft forever
3: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
4: irda0: <NOARP> mtu 2048 qdisc noop state DOWN qlen 8
    link/irda 00:00:00:00 brd ff:ff:ff:ff
5: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:13:ce:8b:99:3e brd ff:ff:ff:ff:ff:ff
    inet 10.30.51.53/24 brd 10.30.51.255 scope global eth1
    inet6 fe80::213:ceff:fe8b:993e/64 scope link
       valid_lft forever preferred_lft forever
6: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc pfifo_fast state DOWN qlen 100
    link/none
    inet 192.168.1.1 peer 192.168.1.2/32 scope global tun0
root@T42:~# ip route show dev eth0
192.168.1.0/24  proto kernel  scope link  src 192.168.1.2 
root@T42:~# 

উপরের মতো দেখা গেছে, tun0প্রশাসনিকভাবে অক্ষম করা হয়েছে ( ip link set dev tun0 down)। এখন যখন আমি এআরপি অনুরোধগুলি পাই 192.168.1.2, পিসি সেই অনুরোধগুলির জবাব দেয় না:

root@T42:~# tcpdump -nei eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:30:34.875427 00:1a:e2:ae:cb:b7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 192.168.1.2 tell 192.168.1.1, length 46
15:30:36.875268 00:1a:e2:ae:cb:b7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 192.168.1.2 tell 192.168.1.1, length 46
15:30:39.138651 00:1a:e2:ae:cb:b7 > 00:1a:e2:ae:cb:b7, ethertype Loopback (0x9000), length 60:
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@T42:~#

শুধু পরে আমার মোছা tun0ইন্টারফেস ( ip link del dev tun0) পিসি ARP অনুরোধ করার জন্য উত্তর দিতে হবে 192.168.1.2উপর eth0ইন্টারফেস।

রাউটিং টেবিলটি ঠিক আগের মতো এবং পরে একসাথে দেখায় ip link del dev tun0:

root@T42:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.30.51.254    0.0.0.0         UG        0 0          0 eth1
10.30.51.0      0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.1.0     192.168.1.2     255.255.255.0   UG        0 0          0 eth0
root@T42:~# ip link del dev tun0
root@T42:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.30.51.254    0.0.0.0         UG        0 0          0 eth1
10.30.51.0      0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.1.0     192.168.1.2     255.255.255.0   UG        0 0          0 eth0
root@T42:~# 

নীচে রাউটিং এন্ট্রি ইতিমধ্যে ip link set dev tun0 downকমান্ড সহ সরানো হয়েছে :

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.2     0.0.0.0         255.255.255.255 UH        0 0          0 tun0

যাইহোক, ip link del dev tun0কমান্ডের আগে এবং পরে রাউটিং টেবিলগুলি ঠিক একই রকম হয় , কার্নেল যে আসল রাউটিংয়ের সিদ্ধান্ত নেবে তা হ'ল:

T42:~# ip route get 192.168.1.1
local 192.168.1.1 dev lo  src 192.168.1.1 
    cache <local> 
T42:~# ip link del dev tun0
T42:~# ip route get 192.168.1.1
192.168.1.1 dev eth0  src 192.168.1.2 
    cache  ipid 0x8390
T42:~# 

এটি কি প্রত্যাশিত আচরণ? কার্নেল কেন রাউটিং টেবিলটিকে উপেক্ষা করে?


আপনি উভয় ক্ষেত্রে নেটস্যাট-আরএন এর আউটপুট পেস্ট করতে পারেন? এই ধরণের ত্রুটিগুলির জন্য রাউটিং টেবিলটি সাধারণত প্রথম স্থান।
বেলারুশ

@ ক্লারিস আমি আমার প্রাথমিক পোস্টটি আপডেট করেছি।
মার্টিন

দুটি ইন্টারফেসে একই আইপি থাকা সমস্যা তৈরি করতে পারে এবং সর্বোত্তম এড়ানো যায়, এটি বলা হচ্ছে যে আপনার সমস্যার সমাধান করতে সক্ষম হওয়া উচিত। পরবর্তী পদক্ষেপটি আরপ ক্যাশে দেখার জন্য, আরপ-এ কোনও কার্যকর ব্যবহার দেখায়?
বেলারুশ

@ ক্যারিস মনে হচ্ছে এর মূল কারণটি হ'ল যখন tun0ইন্টারফেস অক্ষম থাকে তবে কার্নেল রাউটিং টেবিলটিকে উপেক্ষা করে । ip route getআমার আপডেট হওয়া প্রাথমিক পোস্টে কমান্ডের আউটপুট দেখুন । তবে, কার্নেল কেন এমন আচরণ করে?
মার্টিন

উত্তর:


17

আপনার রাউটিং টেবিলটি হুবহু উপেক্ষা করা হচ্ছে না। এটি একটি উচ্চ-অগ্রাধিকারের রাউটিং টেবিল দ্বারা উপেক্ষা করা হচ্ছে।

কি হচ্ছে

আপনি টাইপ করার সময় আপনি যে রাউটিং টেবিলটি দেখেন ip route showতা কেবল কার্নেল দ্বারা ব্যবহৃত রাউটিং টেবিল নয়। প্রকৃতপক্ষে, ডিফল্টরূপে তিনটি রাউটিং টেবিল রয়েছে এবং সেগুলি ip ruleকমান্ডের দ্বারা প্রদর্শিত ক্রম অনুসারে অনুসন্ধান করা হবে :

# ip rule show
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

আপনি যে সারণীর সাথে সর্বাধিক পরিচিত তা হ'ল mainতবে সর্বাধিক অগ্রাধিকারের রাউটিং টেবিলটি local। এই টেবিলটি স্থানীয় এবং সম্প্রচারিত রুটের ট্র্যাক রাখতে কার্নেল দ্বারা পরিচালিত হয়: অন্য কথায়, localটেবিলটি কার্নেলকে তার নিজস্ব ইন্টারফেসের ঠিকানাগুলিতে কীভাবে রুট করতে হয় তা জানায়। এটি দেখতে এমন কিছু দেখাচ্ছে:

# ip route show table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.1.0 dev eth0  proto kernel  scope link  src 192.168.1.2
local 192.168.1.1 dev tun0  proto kernel  scope host  src 192.168.1.1
local 192.168.1.2 dev eth0  proto kernel  scope host  src 192.168.1.2
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.2

রেখাটি উল্লেখ করে দেখুন tun0। এটাই আপনার অদ্ভুত ফলাফলগুলির কারণ route get। এটি বলে যে 192.168.1.1 হল একটি স্থানীয় ঠিকানা, যার অর্থ যদি আমরা 192.168.1.1 এ কোনও এআরপি উত্তর পাঠাতে চাই তবে এটি সহজ; আমরা এটি নিজের কাছে প্রেরণ করি। এবং যেহেতু আমরা একটি রুট খুঁজে পাওয়া যায়নি localটেবিল, আমরা একটি রুট অনুসন্ধানের জন্য বন্ধের সময়, এবং চেক বিরক্ত করবেন না mainবা defaultটেবিল।

একাধিক টেবিল কেন?

সর্বনিম্ন, ip routeপ্রদর্শন টাইপ route printকরা সমস্ত "সুস্পষ্ট" রুটগুলি টাইপ করতে এবং দেখতে না পারা খুব সুন্দর ( কোনও উইন্ডোজ মেশিনে টাইপ করার চেষ্টা করুন )। এটি ভুল কনফিগারেশনের বিরুদ্ধে কিছুটা ন্যূনতম সুরক্ষা হিসাবেও কাজ করতে পারে: মূল রাউটিং টেবিলটি মিশ্রিত হয়ে গেলেও, কার্নেলটি এখনও নিজের সাথে কীভাবে কথা বলতে হয় তা জানে।

(স্থানীয় রুটগুলিকে প্রথম স্থানে রাখবেন কেন? তাই কার্নেল স্থানীয় ঠিকানার জন্য একই রকমের লুকিং কোডটি অন্য সমস্ত কিছুর মতো ব্যবহার করতে পারে It এটি অভ্যন্তরীণভাবে জিনিসগুলিকে সহজ করে তোলে))

এই মাল্টিপল-টেবিল স্কিমটি সহ আপনি আরও কিছু আকর্ষণীয় কাজ করতে পারেন। বিশেষত, আপনি নিজের টেবিলগুলি যুক্ত করতে পারেন এবং যখন তাদের অনুসন্ধান করা হয় তার জন্য বিধি নির্দিষ্ট করতে পারেন। এটিকে "নীতিমালা রাউটিং" বলা হয় এবং আপনি যদি কখনও কোনও প্যাকেটের উত্সের ঠিকানার ভিত্তিতে রুট করতে চেয়েছিলেন তবে লিনাক্সে এটি কীভাবে করা যায়।

আপনি যদি বিশেষত কৌতুকপূর্ণ বা পরীক্ষামূলক জিনিসগুলি করেন তবে আপনি কমান্ডের মধ্যে localউল্লেখ করে নিজে রুটগুলি যুক্ত বা সরিয়ে ফেলতে পারেন । আপনি কী করছেন তা যদি না জানেন তবে আপনি সম্ভবত কার্নেলটিকে বিভ্রান্ত করতে পারেন। এবং অবশ্যই, কার্নেলটি এখনও তার নিজস্ব রুটগুলি যুক্ত এবং মুছে ফেলা চালিয়ে যাবে, যাতে আপনার নিজের ওভাররাইট না হয়ে যায় তা নিশ্চিত করতে আপনাকে দেখতে হবে।table localip route

অবশেষে, আপনি যদি একবারে সমস্ত রাউটিং টেবিল দেখতে চান:

# ip route show table all

আরও তথ্যের জন্য, ip-rule(8)ম্যান পৃষ্ঠা বা iproute2 ডক্স পরীক্ষা করে দেখুন । আপনি কী করতে পারেন তার কয়েকটি উদাহরণের জন্য আপনি অ্যাডভান্সড রাউটিং এবং ট্র্যাফিক কন্ট্রোল হ্যাটোও চেষ্টা করতে পারেন।


ধন্যবাদ! পরে নিয়ম প্রকৃতপক্ষে এখনও উপস্থিত ছিলেন রাউটিং-টেবিল। একবার আমি কার্যকর করা উল্লিখিত নিয়ম সরানো হয়েছিল। তবুও, একটি প্রশ্ন আমি কী সঠিক করছি যে সমস্ত আধুনিক লিনাক্স কার্নেলগুলি (2.6.x, 3.x, 4.x) রুট অনুসন্ধান এবং এভাবে একাধিক টেবিলের জন্য আরপিডিবি ব্যবহার করে? ip link set dev tun0 downlocal 192.168.1.1 dev tun0 proto kernel scope host src 192.168.1.1localip link del dev tun0
মার্টিন

2
হ্যাঁ, আপনি সঠিক এবং আরও কিছু। আরপিডিবি আশ্চর্যজনকভাবে বুড়ো! "আরপিডিবি নিজেই লিনাক্স কার্নেল ২.২-এ নেটওয়ার্কিং স্ট্যাকের পুনর্লিখনের একটি অবিচ্ছেদ্য অঙ্গ ছিল।" এবং থেকে ip(8): " ipআলেক্সি এন কুজনেটসফ লিখেছিলেন এবং লিনাক্স ২.২ এ যুক্ত করেছিলেন।"
জান্ডার

আমি দেখেছি এমন একাধিক কার্নেল রাউটিং টেবিলগুলির মধ্যে এটি সেরা ব্যাখ্যা। ধন্যবাদ!
djluko

1

আপনার বিপরীত পথ ফিল্টারিং কনফিগারেশন সম্ভবত সমস্যা। আরএফসি3704 - বিভাগ 2.4

এন্টারপ্রাইজ লিনাক্স বিতরণগুলিতে (আরএইচইল, সেন্টোস, সায়েন্টিফিক লিনাক্স, ইত্যাদি) এর সমাধানের সম্ভাব্য সর্বোত্তম উপায় হ'ল এর মাধ্যমে সংশোধন /etc/sysctl.confকরাrp_filter = 2

যখন আরএইচইএলের একাধিক আইপি কনফিগার করা থাকে তখন কেবল একটি দূরবর্তী নেটওয়ার্ক থেকে পৌঁছানো যায়। বা কেন আউটবাউন্ড ট্র্যাফিকের রুট আগত ট্র্যাফিকের রুট থেকে পৃথক হয় যখন প্যাকেটগুলিকে উপেক্ষা করবে?


যদি আমি আলগা আরপিএফ চেক (2) ব্যবহার করি বা এমনকি for rp_filter_file in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > "$rp_filter_file"; doneকার্নেলের সাথে আরপিএফ চেক (0) সম্পূর্ণ অক্ষম করে eth0রাখি তবে প্যাকেটগুলি রাউটিংয়ের জন্য 192.168.1.1 এ ইন্টারফেসটি ব্যবহার করবে না । কেবল একবার আমি কার্নেলের tun0সাথে ইন্টারফেসটি মুছলে ইন্টারফেসটি ip link del dev tun0ব্যবহার শুরু করে eth0
মার্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.