cybercoder
سه شنبه 14 اردیبهشت 1389, 16:16 عصر
از اونجايي که ديدم مقاله اي بر روي وب نيست که اين قضيه رو کامل براي NAT روي يک Interface در Freebsd شرح داده باشه تصميم گرفتم اين رو براتون بنويسم.
پس از اين که FreeBSD را نصب کرديد لازم است تا براي فعال سازي IPFW به صورتي که بتواند عمل Forward و همچنين NAT را به کمک NATD انجام دهد، Kernel را اندکي دستکاري کنيد.
براي اين منظور:
# cd /usr/src/sys/i386/conf
# cp GENERIC FIREWALL
حالا يک کپي از kernel در فايلي به نام FIREWALL داريم.
اکنون اين فايل را در يک ويرايشگر باز کرده :
# ee /usr/src/sys/i386/conf/FIREWALL
و خطوط زير را به آن مي افزاييم:
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_FORWARD
فايل را ذخيره کرده و دستورات زير را براي کامپايل کردن kernel با تنظيمات جديد صادر مي کنيم:
# cd /usr/src
# make buildkernel KERNCONF=FIREWALL کامپايل
# make installkernel KERNCONF=FIREWALL نصب
در فايل /etc/rc.conf مقادير زير را وارد مي کنيم:
natd_enable="YES"
squid_enable="YES"
firewall_enable="YES"
پس از reboot سيستم دستورات زير را صادر مي کنيم:
ipfw add 50 divert natd ip from any to X.X.X.X via interfacename
ipfw add 100 allow ip from any to any
ipfw add 110 allow icmp from any to any
و...
X.X.X.X آدرس IP است که باید آدرس ها به آن ترجمه شوند.
توجه شود که حالت بالا براي زمانيست که از 2 آدرس IP بر روي يک interface استفاده مي کنيد يعني ورودي و خروجي NAT روي يک Interface واقع است.
حالا لازم است که Squid را نصب کنيم
pkg_add -r squid30
پس از نصب squid و انجام تنظيمات در فايل /usr/local/etc/squid/squid.conf
squid -z
squid
حالا به قانوني نياز داريم که تمام ترافيک ورودي روي پورت 80 را به پورت squid ارسال کند تا يک پراکسي کش به صورت ترانسپرنت داشته باشيم.
با در نظر گرفتن پورت 3128 به عنوان پورت squid:
ipfw add 60 fwd 127.0.0.1,3128 tcp from any to any 80 in recv interfacename
توجه داشته باشيد اگر قسمت in recv را Interface ي که وروديست انتخاب نکنيم ترافيک loopback هم ارسال خواهد شد که باعث ايجاد حلقه و در نتيجه پاسخ نادرست از squid خواهد شد.
موفق باشيد
پس از اين که FreeBSD را نصب کرديد لازم است تا براي فعال سازي IPFW به صورتي که بتواند عمل Forward و همچنين NAT را به کمک NATD انجام دهد، Kernel را اندکي دستکاري کنيد.
براي اين منظور:
# cd /usr/src/sys/i386/conf
# cp GENERIC FIREWALL
حالا يک کپي از kernel در فايلي به نام FIREWALL داريم.
اکنون اين فايل را در يک ويرايشگر باز کرده :
# ee /usr/src/sys/i386/conf/FIREWALL
و خطوط زير را به آن مي افزاييم:
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_FORWARD
فايل را ذخيره کرده و دستورات زير را براي کامپايل کردن kernel با تنظيمات جديد صادر مي کنيم:
# cd /usr/src
# make buildkernel KERNCONF=FIREWALL کامپايل
# make installkernel KERNCONF=FIREWALL نصب
در فايل /etc/rc.conf مقادير زير را وارد مي کنيم:
natd_enable="YES"
squid_enable="YES"
firewall_enable="YES"
پس از reboot سيستم دستورات زير را صادر مي کنيم:
ipfw add 50 divert natd ip from any to X.X.X.X via interfacename
ipfw add 100 allow ip from any to any
ipfw add 110 allow icmp from any to any
و...
X.X.X.X آدرس IP است که باید آدرس ها به آن ترجمه شوند.
توجه شود که حالت بالا براي زمانيست که از 2 آدرس IP بر روي يک interface استفاده مي کنيد يعني ورودي و خروجي NAT روي يک Interface واقع است.
حالا لازم است که Squid را نصب کنيم
pkg_add -r squid30
پس از نصب squid و انجام تنظيمات در فايل /usr/local/etc/squid/squid.conf
squid -z
squid
حالا به قانوني نياز داريم که تمام ترافيک ورودي روي پورت 80 را به پورت squid ارسال کند تا يک پراکسي کش به صورت ترانسپرنت داشته باشيم.
با در نظر گرفتن پورت 3128 به عنوان پورت squid:
ipfw add 60 fwd 127.0.0.1,3128 tcp from any to any 80 in recv interfacename
توجه داشته باشيد اگر قسمت in recv را Interface ي که وروديست انتخاب نکنيم ترافيک loopback هم ارسال خواهد شد که باعث ايجاد حلقه و در نتيجه پاسخ نادرست از squid خواهد شد.
موفق باشيد