লিনাক্স কার্নেল মাল্টিকাস্ট ইউডিপি প্যাকেটের মধ্য দিয়ে যাচ্ছে না


35

সম্প্রতি আমি একটি নতুন উবুন্টু সার্ভার 10.04 সেট আপ করেছি এবং লক্ষ্য করেছি যে আমার ইউডিপি সার্ভারটি মাল্টিকাস্ট গ্রুপে যোগদানের পরেও ইন্টারফেসে প্রেরিত কোনও মাল্টিকাস্ট ডেটা দেখতে পাবে না। আমি অন্য দুটি উবুন্টু 8.04.4 এলটিএস মেশিনে ঠিক একই সেট আপ পেয়েছি এবং একই মাল্টিকাস্ট গ্রুপে যোগদানের পরে ডেটা পাওয়ার কোনও সমস্যা নেই।

ইথারনেট কার্ডটি ব্রডকম নেটএক্সট্রিম II বিসিএম ৫70০৯ এবং ব্যবহৃত ড্রাইভারটি হ'ল:

b $ ethtool -i eth1
driver: bnx2
version: 2.0.2
firmware-version: 5.0.11 NCSI 2.0.5
bus-info: 0000:01:00.1

আমি আমার মাল্টিকাস্ট রেজিস্ট্রেশনগুলি পরিচালনা করতে স্মক্রাউট ব্যবহার করছি।

b$ smcroute -d
b$ smcroute -j eth1 233.37.54.71

গ্রুপ আইপি ম্যাডারে যোগদানের পরে নতুন যুক্ত হওয়া নিবন্ধকরণ দেখায়।

b$ ip maddr

    1:  lo
        inet  224.0.0.1
        inet6 ff02::1
    2:  eth0
        link  33:33:ff:40:c6:ad
        link  01:00:5e:00:00:01
        link  33:33:00:00:00:01
        inet  224.0.0.1
        inet6 ff02::1:ff40:c6ad
        inet6 ff02::1
    3:  eth1
        link  01:00:5e:25:36:47
        link  01:00:5e:25:36:3e
        link  01:00:5e:25:36:3d
        link  33:33:ff:40:c6:af
        link  01:00:5e:00:00:01
        link  33:33:00:00:00:01
        inet  233.37.54.71 <------- McastGroup.
        inet  224.0.0.1
        inet6 ff02::1:ff40:c6af
        inet6 ff02::1

এতদূর ভাল, আমি দেখতে পাচ্ছি যে আমি এই মাল্টিকাস্ট গ্রুপের জন্য ডেটা পাচ্ছি।

b$ sudo tcpdump -i eth1 -s 65534 host 233.37.54.71
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65534 bytes
09:30:09.924337 IP 192.164.1.120.58848 > 233.37.54.71.15572: UDP, length 212
09:30:09.947547 IP 192.164.1.120.58848 > 233.37.54.71.15572: UDP, length 212
09:30:10.108378 IP 192.164.1.120.58866 > 233.37.54.71.15574: UDP, length 268
09:30:10.196841 IP 192.164.1.120.58848 > 233.37.54.71.15572: UDP, length 212
...

আমি নিশ্চিতও করতে পারি যে ইন্টারফেসটি ম্যাকস্ট প্যাকেটগুলি গ্রহণ করছে।

b $ ethtool -S eth1 | grep mcast_pack
rx_mcast_packets: 103998
tx_mcast_packets: 33

এখন সমস্যা এখানে। আমি যখন সাধারণ রুবি ইউডিপি সার্ভার ব্যবহার করে ট্র্যাফিক ক্যাপচার করার চেষ্টা করি তখন আমি শূন্য তথ্য পাই! এখানে একটি সাধারণ সার্ভার রয়েছে যা 15572 পোর্টে ডেটা প্রেরণের পাঠ করে এবং প্রথম দুটি অক্ষর মুদ্রণ করে। এটি দুটি 8.04.4 উবুন্টু সার্ভারগুলিতে কাজ করে তবে 10.04 সার্ভারটি নয়।

require 'socket'
s = UDPSocket.new
s.bind("", 15572)
5.times do
  text, sender = s.recvfrom(2)
  puts text
end

আমি যদি রুবিতে তৈরি একটি ইউডিপি প্যাকেট লোকালহোস্টে প্রেরণ করি তবে সার্ভারটি এটি গ্রহণ করে এবং প্রথম দুটি অক্ষর মুদ্রণ করে। সুতরাং আমি জানি যে উপরের সার্ভারটি সঠিকভাবে কাজ করছে।

irb(main):001:0> require 'socket'
=> true
irb(main):002:0> s = UDPSocket.new
=> #<UDPSocket:0x7f3ccd6615f0>
irb(main):003:0> s.send("I2 XXX", 0, 'localhost', 15572)

আমি যখন প্রোটোকল পরিসংখ্যানগুলি পরীক্ষা করি তখন দেখি ইনমাস্টকপ্যাক্টস বাড়ছে না। অন্যান্য 8.04 সার্ভারে, একই নেটওয়ার্কে, 10 সেকেন্ডে কয়েক হাজার প্যাকেট প্রাপ্ত হয়েছিল।

b $ netstat -sgu ; sleep 10 ; netstat -sgu
IcmpMsg:
    InType3: 11
    OutType3: 11
Udp:
    446 packets received
    4 packets to unknown port received.
    0 packet receive errors
    461 packets sent
UdpLite:
IpExt:
    InMcastPkts: 4654 <--------- Same as below
    OutMcastPkts: 3426
    InBcastPkts: 9854
    InOctets: -1691733021
    OutOctets: 51187936
    InMcastOctets: 145207
    OutMcastOctets: 109680
    InBcastOctets: 1246341
IcmpMsg:
    InType3: 11
    OutType3: 11
Udp:
    446 packets received
    4 packets to unknown port received.
    0 packet receive errors
    461 packets sent
UdpLite:
IpExt:
    InMcastPkts: 4656  <-------------- Same as above
    OutMcastPkts: 3427
    InBcastPkts: 9854
    InOctets: -1690886265
    OutOctets: 51188788
    InMcastOctets: 145267
    OutMcastOctets: 109712
    InBcastOctets: 1246341

যদি আমি ইন্টারফেসটি প্রমিস মোডে জোর করে চেষ্টা করি তবে কোনও পরিবর্তন হয় না।

এই সময়ে আমি আটকে আছি। আমি নিশ্চিত করেছি যে কার্নেল কনফিগারেশনটি মাল্টিকাস্ট সক্ষম করেছে। সম্ভবত অন্যান্য কনফিগার বিকল্পগুলি আমার চেক করা উচিত?

b $ grep CONFIG_IP_MULTICAST /boot/config-2.6.32-23-server
CONFIG_IP_MULTICAST=y

এখান থেকে কোথায় যাবেন সে সম্পর্কে কোনও চিন্তা?


চিত্রে যান. আমি একটি নতুন প্রশ্ন প্রবেশ করতে যাচ্ছি, সম্পর্কিত অ্যালগরিদম সুখে আমাকে এই প্রশ্নটি উপস্থিত দেখায়, তবে এর কোনও অর্থবহ উত্তর নেই। বু :(।
VxJasonxV

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

আপনি এখনও কাছাকাছি? আমি আপনার জন্য কিছু প্রশ্ন আছে।
VxJasonxV

আমারও এই সমস্যা আছে। প্রিয় বুকিং, আপনি কি এটি সমাধান করেন?

এই সমস্যাটি ছিল এমন অন্যদের কাছে - এই প্রশ্নের সমস্ত উত্তর পড়ুন, কারণ এখানে 2-3 ও / এস সেটিংস রয়েছে যা ঠিক করা দরকার। আমরা পরিবর্তন করে এই সমস্যার সমাধান করা rp_filterএবং /proc/sys/net/ipv4/icmp_echo_ignore_broadcastsএবং তারপর কাজ শুরু করে।
স্যাম গোল্ডবার্গ

উত্তর:


35

আমাদের উদাহরণস্বরূপ, আমাদের সমস্যাটি ম্যাসেজের থেকে আলাদা সিস্টিটাল প্যারামিটারগুলির দ্বারা সমাধান করা হয়েছিল।

দয়া করে মনে রাখবেন যে আমি ওপি (বৌকিং) এর পক্ষে কথা বলি না, মূল সমস্যাটি (ইউজারল্যান্ডে কোনও মাল্টিকাস্ট ট্র্যাফিক নেই) সম্পর্কিত সমস্যার কারণে আমি এই পোস্টে এসেছি।

আমাদের কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যা গ্রাহক সার্ভারের একটি ইন্টারফেসের সাথে সরাসরি সংযুক্ত (সাধারণত) একটি অ্যাপ্লায়েন্স থেকে চারটি মাল্টিকাস্ট ঠিকানায় প্রেরিত ডেটা এবং মাল্টিকাস্ট অ্যাড্রেস প্রতি একটি অনন্য পোর্ট পড়ে।

আমরা যখন কোনও অকারণে অকারণে রহস্যজনকভাবে ব্যর্থ হয়েছিল তখন আমরা কোনও গ্রাহক সাইটে এই সফ্টওয়্যারটি স্থাপন করার চেষ্টা করছিলাম। এই সফ্টওয়্যারটি ডিবাগ করার চেষ্টাগুলির ফলে প্রতিটি সিস্টেম কল পরিদর্শন করা হয়েছিল, শেষ পর্যন্ত তারা সকলেই আমাদের একই জিনিস বলেছিল:

আমাদের সফ্টওয়্যার ডেটা চাইবে এবং ওএস কখনই কোনও সরবরাহ করে না।

মাল্টিকাস্ট প্যাকেটের কাউন্টার বাড়ানো হয়েছে, tcpdump বক্স / নির্দিষ্ট ইন্টারফেসে ট্র্যাফিক দেখিয়েছে, তবুও আমরা এটি দিয়ে কিছুই করতে পারিনি। সেলইনাক্স অক্ষম ছিল, iptables চলমান ছিল তবে কোনও টেবিলে কোনও নিয়ম ছিল না।

স্ট্যাম্পড, আমরা ছিলাম।

এলোমেলোভাবে ঘোরাফেরা করার পরে, আমরা সিসেক্টল হ্যান্ডল করে এমন কার্নেল প্যারামিটারগুলি সম্পর্কে ভাবতে শুরু করি, তবে নথিভুক্ত বৈশিষ্ট্যগুলির কোনওটিই বিশেষভাবে প্রাসঙ্গিক ছিল না, বা যদি মাল্টিকাস্ট ট্র্যাফিকের সাথে তাদের করতে হয় তবে সেগুলি সক্ষম করা হয়েছিল। ওহ, এবং ifconfig বৈশিষ্ট্য লাইনে "আপ (সম্প্রচারিত, চলমান, মাল্টিকাস্ট)" "মাল্টিকাস্ট" তালিকা করেছে। কৌতূহলের বাইরে আমরা তাকালাম /etc/sysctl.conf। 'দেখুন এবং দেখুন, এই গ্রাহকের বেস ইমেজটির নীচে এটিতে কয়েকটি অতিরিক্ত লাইন যুক্ত হয়েছিল।

আমাদের ক্ষেত্রে, গ্রাহক সেট করেছিলেন net.ipv4.all.rp_filter = 1। rp_filter হ'ল রুট পাথ ফিল্টার, যা (আমি এটি বুঝতে পেরেছি) সমস্ত ট্র্যাফিক প্রত্যাখ্যান করে যা সম্ভবত এই বাক্সে পৌঁছতে পারে নি। নেটওয়ার্ক সাবনেট হপ্পিং, উত্স আইপি ছদ্মবেশী করা হচ্ছে বলে মনে করা হচ্ছে।

ঠিক আছে, এই সার্ভারটি একটি 192.168.1 / 24 সাবনেটে ছিল এবং মাল্টিকাস্ট ট্র্যাফিকের জন্য অ্যাপ্লায়েন্সের উত্স আইপি ঠিকানাটি কোথাও ছিল 10. * নেটওয়ার্কে। এইভাবে, ফিল্টারটি সার্ভারকে ট্র্যাফিকের সাথে অর্থপূর্ণ কিছু করতে বাধা দিচ্ছিল।

গ্রাহক দ্বারা অনুমোদিত কয়েকটা টুইট; net.ipv4.eth0.rp_filter = 1এবং net.ipv4.eth1.rp_filter = 0আমরা সুখে দৌড়ছিলাম।


2
এই কাজ! rp_filterআমাদের 10 GB নেটওয়ার্ক ইন্টারফেস আমাদের এর ফলে UDP মাল্টিকাস্ট প্যাকেট সব ডাম্পিং করা হয়। ফিল্টার বন্ধ করে দিয়ে সমস্ত কিছু প্রবাহিত হতে দিন।
খ্রিস্টিয়াকক

উবুন্টু রিসিভারে টিএম ডিভাইসে এটিএমটি মাল্টিকাস্টের উপরে স্ট্রিমিংয়ের সময় আমাদের সমস্যা ছিল এবং আমরা প্যাকেটগুলি টিসিপিডাম্পের মাধ্যমে ডিভাইসে বিতরণ করতে দেখতে পেলাম, তবে অ্যাপ্লিকেশনটি কেবল স্ট্রিম করতে চায় না। এই পোস্টটি আমাদের বাঁচায়!
সফটওয়্যার ইঞ্জিনিয়ার

2
উবুন্টু ১৪.০৪ এ চলছে, আমি সেট করার পরে এটি কেবল আমার জন্য কাজ করেছিল net.ipv4.all.rp_filter = 0। বিশেষত, মাল্টিকাস্ট ডেটা এথ 2 এ পৌঁছে দিয়ে, আমাকে net.ipv4.eth2.rp_filter = 0এবং উভয়ই সেট করতে হয়েছিল net.ipv4.all.rp_filter = 0
টি-হক্ক

4

টিএল / ডিআর এটিও নিশ্চিত করুন যে আপনার মাল্টিকাস্ট কোনও ভ্যালান থেকে আসে না। tcpdump -eতারা যদি তা নির্ধারণ করতে সহায়তা করে।

সমস্ত ন্যায়বিচারে, কারও কারও অবশ্যই এমন একটি চেকলিস্ট সহ একটি পৃষ্ঠা তৈরি করা উচিত যা মাল্টিকাস্ট ব্যবহারকারীর দেশে পৌঁছাতে বাধা দিতে পারে। আমি কয়েক দিন ধরে এটির সাথে লড়াই করে যাচ্ছিলাম, এবং স্বাভাবিকভাবে ওয়েবে আমার সন্ধানের মতো কিছুই পাওয়া যায় নি।

আমি কেবল প্যাকেটগুলিতেই দেখতে পেলাম না tcpdump, আমি অন্য উত্পাদনকারীদের জন্য অন্য একটি ইন্টারফেসে অন্যান্য মাল্টিকাস্ট প্যাকেটগুলি পেতে পারি। আমি যে কমান্ডটি মাল্টিকাস্ট পেতে পারি তা পরীক্ষার জন্য শেষ করেছিলাম:

$ GRP=224.x.x.x # set me to the group
$ PORT=yyyy # set me to the receiving port
$ IFACE=mmmm # set me to the name or IP address of the interface
$ strace -f socat -  UDP4-DATAGRAM:$GRP:$PORT,ip-add-membership=$GRP:$IFACE,bind=0.0.0.0:$PORT,multicast-loop=0

straceএখানে socatআসার কারণটি হ'ল আমি আসলে প্যাকেটগুলি স্টডআউটে প্রিন্ট করতে পারিনি , তবে straceআউটপুটে আপনি পরিষ্কারভাবে দেখতে socatপাচ্ছেন যে সীমাবদ্ধ সকেট থেকে প্রকৃত ডেটা প্রাপ্ত হচ্ছে কিনা (এটি প্রাথমিক selectস্তরের কয়েক বছর পরে নিঃশব্দ হবে )

  • rp_filtersysctl - প্রযোজ্য নয়, সিস্টেমগুলি একই আইপি নেটওয়ার্কে রয়েছে (আমি সেগুলি সমস্তগুলিতে সেট করে দিয়েছি 0, মনে হয় এটি 1এখন ডিফল্ট সেটিংস, কমপক্ষে উবুন্টুর জন্য)।
  • ফায়ারওয়ালস / ইত্যাদি - প্রাপ্তি ব্যবস্থা ফায়ারওয়াল মুক্ত (আমি মনে করি না যে প্যাকেটগুলি ফায়ারওয়াল করা থাকলে tcpdump এ প্রদর্শিত হবে, তবে আমি মনে করি ফায়ারওয়ালটি মজার হলে এটি সম্ভব)
  • আইপি / মাল্টিকাস্ট রাউটিং এবং একাধিক ইন্টারফেস - আমি স্পষ্টভাবে সঠিক ইন্টারফেসে গ্রুপটিতে যোগদান করেছি
  • ওয়াকি নেটওয়ার্ক হার্ডওয়্যার - এটি ছিল আমার শেষ অবলম্বন, তবে কিছু ল্যাপটপকে একটি ইন্টেল এনইউসি তে পরিবর্তন করা কোনও লাভ হয়নি। এখান থেকেই আমি আমার কনুই চিবানো শুরু করেছিলাম এবং এসই-তে পোস্টিংটি চালিয়েছি।
  • আমার ক্ষেত্রে সমস্যাটি ছিল বিশেষায়িত হার্ডওয়্যার দ্বারা ভিএলএএন ব্যবহার করা যা সেই মাল্টিকাস্ট প্যাকেট তৈরি করে। এটি আপনার সমস্যা কিনা তা দেখতে, -eপতাকাটি অবশ্যই অন্তর্ভুক্ত করবেন tcpdumpএবং ভ্লান ট্যাগের জন্য যাচাই করে নিন। ইউজারল্যান্ড pac প্যাকেটগুলি পেতে সক্ষম হওয়ার আগে এটি সঠিক ভ্যালানটিতে একটি ইন্টারফেস কনফিগার করতে হবে। আমার কাছে দানটি হ'ল মাল্টিকাস্ট প্রযোজকরা পিং করবেন না, তবে এআরপি ক্যাশেও উঠবেন না, যদিও আমি স্পষ্টভাবে এআরপি জবাব দেখতে পাচ্ছি।

এটি ভিএলএএন দিয়ে চলতে এই লিঙ্কটি মাল্টিকাস্ট রাউটিংটি কনফিগার করতে সহায়ক হতে পারে। (দুঃখের সাথে আমি এতে নতুন তাই খ্যাতি আমাকে উত্তর যুক্ত করতে দেয় না Hence তাই এই সম্পাদনাটি))

আমি যা করেছি তা এখানে (প্রয়োজনে সুডো ব্যবহার করুন):

ip link add link eth0 name eth0_100 type vlan id 100
ip addr add 192.168.100.2/24 brd 192.168.100.255 dev eth0_100
ip link set dev eth0_100 up
ip maddr add 01:00:5e:01:01:01 dev eth0_100
route -n add -net 224.0.0.0 netmask 240.0.0.0 dev eth0_100

ভ্যালান আইডি 100 দিয়ে ভ্লান ট্র্যাফিকের জন্য তৈরি করা হলে এইভাবে একটি অতিরিক্ত ইন্টারফেস The ভ্যালান আইপি অপ্রয়োজনীয় হতে পারে। তারপরে নতুন ইন্টারফেসের জন্য একটি মাল্টিকাস্ট ঠিকানা কনফিগার করা হয়েছে (01: 00: 5e: 01: 01: 01 239.1.1.1 এর লিঙ্ক স্তর ঠিকানা) এবং আগত সমস্ত মাল্টিকাস্ট ট্র্যাফিক eth0_100 এর সাথে আবদ্ধ। আমি উপরের উত্তরের সমস্ত সম্ভাব্য পদক্ষেপগুলিও করেছি (iptables, rp_filter ইত্যাদি পরীক্ষা করুন)।


@ গিরো: মাল্টিকাস্ট রুট যুক্ত করা বহির্গামী মাল্টিকাস্ট সেট আপ করে , আগত মাল্টিকাস্ট নয় ast আপনি সরাসরি ইন্টারফেসে মাল্টিকাস্ট আইপি ঠিকানাগুলি আবদ্ধ করা উচিত নয়, যদি না আপনি মজার কিছু করছেন তবে এটি সাধারণত অ্যাপ্লিকেশনটির কাজ।
পাভেল ভেসেলভ

2

আপনি এই সেটিংসটি চেষ্টা করে দেখতে চাইতে পারেন:

proc

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

sysctl.conf

sed -i -e 's|^net.ipv4.icmp_echo_ignore_broadcasts =.*|net.ipv4.icmp_echo_ignore_broadcasts = 0|g' /etc/sysctl.conf

এগুলি আরএইচইএলে মাল্টিকাস্টিং সক্ষম করতে ব্যবহৃত হয়েছে।

আপনি নিশ্চিত করতে চাইতে পারেন যে আপনার ফায়ারওয়াল বিদ্রোহী ট্র্যাফিকের অনুমতি দিচ্ছে; আবার আরএইচইএল দিয়ে আমি নিম্নলিখিতগুলি সক্ষম করেছি:

# allow anything in on multicast addresses
-A INPUT -s 224.0.0.0/4 -j ACCEPT
-A INPUT -p igmp -d 224.0.0.0/4 -j ACCEPT
# needed for multicast ping responses
-A INPUT -p icmp --icmp-type 0 -j ACCEPT

"সম্প্রচার" বিকল্পগুলি "মাল্টিকাস্ট" এও প্রযোজ্য?
রায়েডওয়াল্ড

0

আপনি কি একটি পরিচালিত সুইচ ব্যবহার করছেন? কারও কারও কাছে 'সম্প্রচার ঝড়' বা অন্যান্য মাল্টিকাস্ট সমস্যাগুলি প্রতিরোধের বিকল্প রয়েছে, যার ফলে তারা নির্দিষ্ট ধরণের প্যাকেটগুলি প্রতিরোধ করতে পারে। আমি আপনার সুইচ ডকুমেন্টেশন একবার দেখে পরামর্শ দিচ্ছি।


0
s.bind("", 15572)

এ ব্যাপারে নিশ্চিত ""? মাল্টিকাস্ট আইপি-অ্যাড্রেসটি বাঁধতে কেন ব্যবহার করছেন না?


খালি হোস্ট ঠিকানাগুলির অর্থ সাধারণত "সমস্ত ইন্টারফেস"।
VxJasonxV
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.