هنگامی که این مطلب را میخوانید، ممکن است توسط خودم یا دیگران تغییراتی کرده باشد. بدین ترتیب مشکلات آن برطرف شده و قسمتهای جدیدی به آن اضافه میشوند. همواره میتوانید آخرین نسخه این مطلب را در دانشنامه BSD مطالعه کنید.
برای پیکربندی کارت شبکه، باید بدانید که مدل کارت شبکهتان چیست، از چه چیپی استفاده میکند و اینکه آیا یک کارت PCI هست یا ISA.
FreeBSD طیف وسیعی از کارتهای شبکه PCI و ISA را پشتیبانی میکند. برای اینکه بدانید کارت شبکهتان توسط FreeBSD پشتیبانی میشود یا نه میتوانید لیست سختافزارهای سازگار (HCL) را ببینید.
بعد از اینکه مطمئن شدید که کارت شبکهتان توسط FreeBSD پشتیبانی میشود، باید درایور مناسب را برای آن تعیین کنید. لیستی از این درایورها را میتوانید در فایلهای /usr/src/sys/conf/NOTES و /usr/src/sys/arch/conf/NOTES ببینید. همچنین این فایلها حاوی اطلاعاتی درباره کارتها/چیپستهای مورد پشتیبانی هستند. اگر شک دارید که کدام درایور مناسبتر است، میتوانید صفحه manual درایور مورد نظر را ببینید. صفحه manual اطلاعات بیشتری را درباره سخت افزارهای مورد پشتیبانی و حتی مشکلات احتمالی در اختیار شما قرار میدهد.
درایور بیشترِ کارتهای رایج در کرنل GENERIC گنجانده شده است. بنابراین لازم نیست شما وقت خود را برای پیدا کردن درایور مناسب تلف کنید. چون این کارتها در هنگام بوت به صورت خودکار شناسایی شده و درایور مناسب برای آنها بارگزاری میشود. مثل زیر:
dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 miibus0: <MII bus> on dc0 bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0 bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc0: Ethernet address: 00:a0:cc:da:da:da dc0: [ITHREAD] dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 miibus1: <MII bus> on dc1 bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1 bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: Ethernet address: 00:a0:cc:da:da:db dc1: [ITHREAD]
در مثال بالا میبینید که دو کارت شبکه توسط درایوری به نام dc شناسایی شدهاند. اگر درایور کارت شبکه شما در کرنل GENERIC وجود نداشته باشد، باید درایور مناسبِ آن کارت را در هسته بارگزاری کنید. این کار به دو صورت امکانپذیر است:
- سادهترین راه این است که با استفاده از دستور kldload درایور مورد نظر خود را در هسته بارگزاری کنید. اما مشکلی که در این روش وجود دارد این است که با راهاندازی مجدد سیستم، درایور مجدداً باراندازی (unload) میشود و شما مجبورید دوباره آن را بارگزاری کنید. برای رفع این مشکل، میتوانید خط مربوط به درایور را به فایل /boot/loader.conf اضافه کنید تا همیشه درایور مورد نظر به صورت خودکار در هسته بارگزاری شود. البته تمام درایورها به صورت ماژول موجود نیستند. مثل درایورهای بعضی از کارتهای ISA
- میتوانید یک کرنل جدید کامپایل کرده و درایور مورد نظر خود را به صورت ثابت در آن قرار دهید. برای اینکه بدانید که چه خطی را باید به فایل پیکربندی کرنل اضافه کنید، فایلهای /usr/src/sys/conf/NOTES و /usr/src/sys/arch/conf/NOTES و همچنین صفحه manual درایور مورد نظر خود را مطالعه کنید. اگر درایور کارت شبکه شما توسط کرنل GENERIC شناسایی شده است، کرنل جدید را کامپایل نکنید.
پیکربندی کارت شبکه
بعد از اینکه درایور مناسب در هسته بارگزاری شد، باید کارت شبکه خود را پیکربندی کنید. مثل خیلی از چیزهای دیگر، برای پیکربندی کارت شبکه هم میتوانید از sysinstall استفاده کنید.
برای اینکه لیستی از کارتهای شبکه فعال را به همراه تنظیمات فعلیشان ببینید، میتوانید از دستور ifconfig استفاده کنید. مثال:
% ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:da inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:db inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 media: Ethernet 10baseT/UTP status: no carrier plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM> inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 inet6 ::۱ prefixlen 128 inet 127.0.0.1 netmask 0xff000000 nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
در مثال بالا ما چهار کارت شبکه به شکل زیر داریم:
نام کارت شبکه | توضیحات |
---|---|
dc0
|
اولین رابط اترنت |
dc1
|
دومین رابط اترنت |
plip0
|
رابط پورت موازی (اگر یک پورت موازی در سیستم وجود داشته باشد) |
lo0
|
کارت شبکه loopback |
یک کارت شبکه بر اساس درایوری که استفاده میکند و همچنین ترتیب شناسایی شدن کارت توسط کرنل نامگذاری میشود. مثلاً کارت شبکه sis2، سومین کارت شبکه در سیستم است که از درایور sys استفاده میکند. (شماره ها از صفر شروع میشوند) dc0 هم اولین کارت شبکه است که از درایور dc استفاده میکند.
حالا خروجی دستور ifconfig را تحلیل کرده و به بررسی کارت شبکه dc0 میپردازیم:
- UP به این معنیست که کارت شبکه پیکربندی شده و آماده است.
- inet یعنی اینکه این کارت شبکه یک آدرس IPv4 دارد. (در اینجا ۱۹۲٫۱۶۸٫۱٫۳)
- subnet mask این کارت شبکه ۰xffffff00 یا به دَهدَهی ۲۵۵٫۲۵۵٫۲۵۵٫۰ است.
- BROADCAST به این معنیست که این کارت شبکه یک آدرس broadcast (آدرس پخش همگانی) معتبر دارد که در اینجا ۱۹۲٫۱۶۸٫۱٫۲۵۵ است.
- کلمه ether مشخص کنندهMac Address این کارت شبکه است. (در اینجا ۰۰:a0:cc:da:da:da)
- این کارت شبکه به گونهای تنظیم شده تا رسانه مورد استفاده آن به صورت خودکار انتخاب شود. (media: Ethernet autoselect (100baseTX <full-duplex>)). میبینید که کارت شبکه dc0 طوری پیکربندی شده تا با رسانه ۱۰baseT/UTP کار کند. برای کسب اطلاعات بیشتر درباره انواع رسانههای موجود برای یک داریور، صفحه manual درایور مورد نظر را ببینید.
- وضعیت (status) این کارت شبکه active است. یعنی کابل شبکه به آن متصل بوده و سیگنال حامل شناسایی شده است. اگر به کارت شبکه dc1 نگاه کنید میبینید که نوشته : status: no carrier این حالت وقتی که کابل شبکه به کارت متصل نباشد طبیعی است.
اگر خروجی ifconfig چیزی شبیه زیر بود:
dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active
یعنی اینکه کارت شبکه مورد نظر هنوز پیکربندی نشده است. برای پیکربندی کارت شبکه باید به عنوان کاربر root وارد سیستم شوید.
دستور پایه برای پیکربندی کارت شبکه، همان دستور ifconfig است. در ادامه مثالهایی را خواهیم دید.
فعال/غیرفعال کردن کارت
این امکان وجود دارد تا کارت شبکه خود را فعال/غیر فعال کنید. کارت شبکهای که غیرفعال است نمیتواند به درخواستها پاسخ دهد. برای غیر فعال کردن یک کارت شبکه به صورت زیر عمل کنید:
ifconfig IFNAME down
به جای IFNAME نام کارت شبکه خود را بنویسید. دستور زیر کارت شبکه dc0 را غیر فعال میکند:
ifconfig dc0 down
برای فعال کردن مجدد این کارت شبکه دستور زیر را وارد کنید:
ifconfig dc0 up
اختصاص دادن IP به کارت شبکه
برای اختصاص دادن یک آدرس IPv4 به صورت زیر عمل کنید:
# ifconfig IFNAME ADDRESS_FAMILY ADDRESS netmask SUBNETMASK
مثال:
# ifconfig dc0 inet 192.168.1.3 netmask 255.255.255.0
دستور بالا آدرس ۱۹۲٫۱۶۸٫۱٫۳ با netmask 255.255.255.0 را به کارت شبکه dc0 اختصاص میدهد.
ADDRESS_FAMILY نوع آدرسی که میخواهید به کارت شبکه اختصاص دهید را مشخص میکند. برای اختصاص دادن یک آدرس IPv4 از کلمه inet و برای IPv6 از inet6 استفاده کنید.
نکته دیگری که دانستنش میتواند بریتان جالب باشد تغییر دادن Mac Address یک کارت شبکه است. هر کارت شبکه یک آدرس سخت افزاری منحصر به فرد دارد که در کارخانه به کارت اختصاص داده میشود. در یک سیستم FreeBSD امکان تغییر این آدرس سخت افزاری وجود دارد. کافیست در فیلد ADDRESS_FAMILY کلمه ether را وارد کنید. در مثال زیر ما آدرس سخت افزاری کارت شبکه dc0 را برابر e0:69:95:71:38:df قرار میدهیم:
# ifconfig dc0 ether e0:69:95:71:38:df
تمامی تنظیمات بالا با راهاندازی مجدد سیستم از بین خواهند رفت. برای دائمی کردن این تنظیمات، باید آنها را در فایل /etc/rc.conf قرار دهید.
فایل /etc/rc.conf را با ویرایشگر دلخواه خود باز کنید. باید یک خط مجزا برای هر کارت شبکه اضافه کنید. برای مثال:
ifconfig_dc0=\"inet 192.168.1.3 netmask 255.255.255.0\" ifconfig_dc1=\"inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP\"
کافیست تا همان آرگومانهایی که در خط فرمان به دستور ifconfig میدهید را در داخل دابل کوتیشن بنویسید. اگر در هنگام نصب FreeBSD کارت شبکه خود را پیکربندی کردهاید، احتمالاً خطوط بالا وجود داشته و نیاز به وارد کردن مجدد آنها نیست. کافیست تا مقادیر جدید را جایگزین کنید.
خب برای اعمال شدن تنظیمات باید سرویس netif را راهاندازی مجدد کنید. میتوانید این کار را هم با restart کردن کل سیستم و هم با دستور زیر انجام دهید:
# /etc/rc.d/netif restart
تغییر نام کارت شبکه
اگر از اسم یک کارت شبکه خوشتان نمیآید مجبور به استفاده از آن نیستید و میتوانید آن را عوض کنید. این کار را میتوانید با استفاده از کلید واژه name در دستور ifconfig انجام دهید. بنابراین شکل کلی این دستور به صورت زیر خواهد بود:
# ifconfig IFNAME name NEWNAME
مثال:
# ifconfig dc0 name lan0
دستور بالا کارت شبکه dc0 را به lan0 تغییر نام میدهد.
اضافه کردن default gateway
اگر قصد دسترسی به اینترنت را دارید، باید default gateway مورد نظر خود را تنظیم کنید. برای این کار خط زیر را به فایل /etc/rc.conf اضافه کنید:
defaultrouter=\"your_default_router\"
مثلا:
defaultrouter=\"192.168.1.20\"
سپس دستور زیر را اجرا کنید تا سرویس routing راهاندازی مجدد شده و تنظیمات اعمال گردند.
# /etc/rc.d/routing restart
بعد از اینکه کارت شبکه خود را پیکربندی کردید، نوبت به تست آن میرسد.
برای اینکه بدانید یک کارت شبکه درست کار میکند یا نه باید دو کار را انجام دهید. اول خودِ کارت شبکه را ping کنید و دوم یک ماشین دیگر را ping کنید.
برای ping کردن یک کارت شبکه محلی به صورت زیر عمل کنید:
% ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms
حالا یک ماشین دیگر را ping میکنیم:
% ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms
خروجی دستور بالا نشان میدهد که پنج بسته فرستاده شد، در عوض پنج بسته هم دریافت شد و ۰% بسته ها از دست رفتند. (این یعنی همه چیز به خوبی کار میکند.)