برای پیکربندی کارت شبکه، باید بدانید که مدل کارت شبکه‌تان چیست، از چه چیپی استفاده می‌کند و اینکه آیا یک کارت 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
۰۰۰ff 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
۰۰۰ff 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 وجود نداشته باشد، باید درایور مناسبِ آن کارت را در هسته بارگذاری کنید. این کار به دو صورت امکان‌پذیر است:

  1. ساده‌ترین راه این است که با استفاده از دستور kldload درایور مورد نظر خود را در هسته بارگذاری کنید. اما مشکلی که در این روش وجود دارد این است که با راه‌اندازی مجدد سیستم، درایور مجدداً باراندازی (unload) می‌شود و شما مجبورید دوباره آن را بارگذاری کنید. برای رفع این مشکل، می توانید خط مربوط به درایور را به فایل /boot/loader.conf اضافه کنید تا همیشه درایور مورد نظر به صورت خودکار در هسته بارگذاری شود. البته تمام درایورها به صورت ماژول موجود نیستند. مثل درایورهای بعضی از کارت‌های ISA.
  2. می‌توانید یک کرنل جدید کامپایل کرده و درایور مورد نظر خود را به صورت ثابت در آن قرار دهید. برای اینکه بدانید که چه خطی را باید به فایل پیکربندی کرنل اضافه کنید، فایل های /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 می‌پردازیم:

  1. UP به این معنی است که کارت شبکه پیکربندی شده و آماده است.
  2. inet یعنی اینکه این کارت شبکه یک آدرس IPv4 دارد. (در اینجا ۱۹۲٫۱۶۸٫۱٫۳)
  3. subnet mask این کارت شبکه ۰xffffff00 یا به دَهدَهی ۲۵۵٫۲۵۵٫۲۵۵٫۰ است.
  4. BROADCAST به این معنی است که این کارت شبکه یک آدرس broadcast (آدرس پخش همگانی) معتبر دارد که در اینجا ۱۹۲٫۱۶۸٫۱٫۲۵۵ است.
  5. کلمه ether مشخص کننده Mac Address این کارت شبکه است. (در اینجا ۰۰:a0:cc:da:da:da)
  6. این کارت شبکه به گونه‌ای تنظیم شده تا رسانه مورد استفاده آن به صورت خودکار انتخاب شود. ‎(media: Ethernet autoselect (100baseTX <full-duplex>))‎. می بینید که کارت شبکه dc0 طوری پیکربندی شده تا با رسانه ۱۰baseT/UTP کار کند. برای کسب اطلاعات بیشتر درباره انواع رسانه‌های موجود برای یک داریور، صفحه manual درایور مورد نظر را ببینید.
  7. وضعیت (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
۶۴ bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
۶۴ bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
۶۴ bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
۶۴ bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
۶۴ bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

--- ۱۹۲٫۱۶۸٫۱٫۳ ping statistics ---
۵ 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
۶۴ bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
۶۴ bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
۶۴ bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
۶۴ bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
۶۴ bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

--- ۱۹۲٫۱۶۸٫۱٫۲ ping statistics ---
۵ packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

خروجی دستور بالا نشان می‌دهد که پنج بسته فرستاده شد، در عوض پنج بسته هم دریافت شد و ۰% بسته ها از دست رفتند. (این یعنی همه چیز به خوبی کار می‌کند.)

اختصاص چند آدرس به یک کارت

این امکان وجود دارد تا به هر کارت شبکه بیش از یک آدرس IP اختصاص دهید. هر کارت شبکه تنها یک آدرس واقعی دارد اما می‌تواند به هر تعداد دلخواهی آدرس مستعار داشته باشد. این آدرس‌های مستعار را می‌توانید در فایل /etc/rc.conf تعریف کنید.

فرض کنید کارت شبکه‌ای به نام fxp0 داریم. می‌توان آدرس‌های مستعار را به صورت زیر به این کارت شبکه اختصاص داد:

ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

دقت داشته باشید که آدرس‌های مستعار باید با alias0 شروع شده و یک‌واحد یک‌واحد افزایش یابند. (برای مثال ‎_alias1‎، ‎_alias2‎ و به همین ترتیب) به محض اینکه شماره‌ای اشتباه باشد، آدرس‌های بعدی انتساب داده نخواهند شد.

محاسبه netmask برای آدرس‌های مستعار بسیار مهم است؛ اما خوشبختانه کار ساده‌ای است. هر کارت شبکه باید یک netmask واقعی و صحیح به ازای هر شبکه‌ای که در آن واقع شده داشته باشد. تمام دیگر آدرس‌هایی که در آن شبکه قرار می‌گیرند، باید netmaskای برابر با ۲۵۵٫۲۵۵٫۲۵۵٫۲۵۵ یا به فرم شانزده‌شانزدهی ۰xffffffff داشته باشند.

برای مثال فرض کنید که کارت شبکه‌ای به نام fxp0 داریم که به دو شبکه متصل شده است. یکی ۱۰٫۱٫۱٫۰ با netmaskای برابر با ۲۵۵٫۲۵۵٫۲۵۵٫۰ و دیگری ۲۰۲٫۰٫۷۵٫۱۶ با netmaskای معادل ۲۵۵٫۲۵۵٫۲۵۵٫۲۴۰٫ می‌خواهیم محدوده ۱۰٫۱٫۱٫۱ تا ۱۰٫۱٫۱٫۵ و همین طور محدوده ۲۰۲٫۰٫۷۵٫۱۷ تا ۲۰۲٫۰٫۷۵٫۲۰ را به این کارت شبکه اختصاص دهیم. همان طور که در بالا گفته شد، تنها اولین آدرس در هر محدوده (در این مثال ۱۰٫۰٫۱٫۱ و ۲۰۲٫۰٫۷۵٫۱۷) باید یک netmask واقعی داشته باشد و تمام آدرس های دیگر (از ۱۰٫۱٫۱٫۲ تا ۱۰٫۱٫۱٫۵ و ۲۰۲٫۰٫۷۵٫۱۸ تا ۲۰۲٫۰٫۷۵٫۲۰) باید netmaskای معادل ۲۵۵٫۲۵۵٫۲۵۵٫۲۵۵ داشته باشند.

برای انجام این کار کافی است خطوط زیر را به فایل /etc/rc.conf اضافه کنیم:

ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"