সম্প্রতি আমি একটি নতুন উবুন্টু সার্ভার 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
এখান থেকে কোথায় যাবেন সে সম্পর্কে কোনও চিন্তা?
rp_filter
এবং /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
এবং তারপর কাজ শুরু করে।