ShirazOnline
نمایش نتایج: از شماره 1 تا 3 , از مجموع 3

موضوع: راه اندازی Nat در لینوکس

  1. #1
    RezaBehroozi admin آواتار ها
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Iran/Shiraz
    نوشته ها
    11,188
    تشکرها / پسندها

    پیش فرض راه اندازی Nat در لینوکس

    SNAT=source address transtlation
    DNAT=destination address translation
    راه اندازی SNAT با iptables :
    SNAT یکی از پرکاربردترین انواع nat با iptables بدلیل نوع توپولوژی مورد استفاده میباشد.
    اجازه بدید برای نمونه سناریو زیر را بررسی کنیم :
    شبکه 192.168.1.0/24 داخل دفتر ماست.یک ارتباط ethernet با تامین کننده اینترنت داریم که آدرس ip که به ما اختصاص دادند 1.2.3.1/30 و gateway پیش فرض هم 1.2.3.2 میباشد.
    همه کامپیوترهای داخل 192.168.1.0/24 با خروجی پیش فرض 192.168.1.1 تنظیم شده اند.



    روتر لینوکس ما دارای 2 تا کارت شبکه میباشد :
    1-Eth0 با ip آدرس 192.168.1.1 و netmask=255.255.255.0 به یک سوییچ که با بقیه سیستم ها در شبکه 192.168.1.0/24 ارتباط دارد متصل میباشد.
    2-Eth1 با ip آدرس 1.2.3.1 و netmask=255.255.255.252 به تامین کننده اینترنت متصل میاشد.
    ما میتونیم SNAT رو برای همه سیستم ها در 192.168.1.0/24 راه بیاندازیم فقط با یک rule
    کد:
    iptables -t nat - A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 1.2.3.1
    این دستور اثری مشابه دستور زیر داره که ما استفاده میکنیم اگر آدرس eth1 , ip بصورت پویا اختصاص داده میشود یا اگر ما از dial-up modem بجای یک کارت شبکه استفاده میکنیم :
    کد:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
    تصور کنید تامین کننده ما همه ی پورت های بالایتر از 1024 را ***** کرده است.در این صورت ما نیاز به تغییر پورت منبع(source) هم داریم و نه فقط آدرس های ip منبع .
    این تغییرات بدین شکل قابل انجام میباشد :
    کد:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 1.2.3.1:1-1024
    یکی از کابران در شکل قیلی از طرفداران IRC هست و با شما تماس میگیره و میگه که نمی تونه به هیچ یک از شبکه های IRC وصل شه.این معنیش اینه که ماژول ip_conntrack نیاز به کمی کمک داره و ما میتونیم کمکش کنیم با قرار دادن ip_conntrack_irc ماژول در کرنل.همچنین ممکنه ما بخوایم به کاربرا اجازه بدیم تا ارتباطات ftp رو با موفقیت انجام بدن پس ماژول ip_conntrack_ftp رو در کرنل اضافه میکنیم.
    کد:
    modprobe ip_conntrack_irx   #or  insmod ip_conntrack_irc
    modprobe ip_conntrack_ftp   #or  insmod ip_conntrack_ftp
    بعد از چند هفته بقیه کابرها هم به استفاده از IRC روی میارن و شروع به شکایت در مورد اتصال به IRC میکنن چون شبکه IRC اجازه چند ارتباط محدود از یک ip خاص رو میده پس ما تصمیم گرفتیم که با افزایش ip ها این مشکل رو حل کنیم.حساب کردیم که 32 تا آدرس ip کافی هست برای اونها پس به تامین کننده اینترنت تماس گرفتیم و درخواست ip ادرسهای بیشتر رو دادیم و اونها به ما 1.2.4.0/27 رو اختصاص دادند.ما میباست rule اولیه رو اینجوری تغییر بدیم :
    i
    کد:
    ptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 1.2.4.0-1.2.4.32
    شکایت کاربرا قطع میشه ولی ما میدونیم که public ip address کامپیتر لینوکس ما در دستور بالا استفاده نمیشه برای nat , پس اون رو هم اضافه میکنیم
    کد:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 1.2.4.0-1.2.4.30 --to 1.2.3.1
    یکی از کاربرا در یک شبکه irc اختلال ایجاد میکنه در حالیکه ip اون به 1.2.4.15 ترجمه شده بود..این ip به لیست ip به لیست فیلترینگ اضافه میشه و ما نیاز داریم که این آدرس رو از nat خارج کنیم
    کد:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 1.2.4.0-1.2.4.14 --to 1.2.4.16-1.2.4.32 --to 1.2.3.1
    یکی از کاربران با Ip ادرس 192.168.1.19 شکایت میکنه که نمیتونه به هیچ کامپیوتری با آدرس ip های بالاتر از 192.168.1.32 دسترسی داشته باشه.این امکان وجود داره که کاربر مورد نظر netmask رو به 255.255.255.227 تغییر داده باشه , پس همه ip packet ها از کامپیوتر اون به کامپیوترهای داخل 192.168.1.0/24 که داخل 192.168.1.0/27 نیستند از طریق روتر لینوکسی ما عبور میکنند و ادرسشون ترجمه میشه(SNATED). برای حل این مشکل ما 2 راه حل داریم.
    اول اینکه SNAT برای 192.168.1.0/24 وقتیکه مقصد کامپیوتری دیگر در 192.168.1.0/24 هست صورت نگیرد :
    کد:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j SNAT --to 1.2.4.0-1.2.4.30 --to 1.2.3.1
    دومین گزینه ما اینه که SNAT فقط برای بسته هایی که از eth1 خارج میشوند صورت پذیرد :
    کد:
    iptables -t nat -A POSTROUTNG -s 192.168.1.0/24 -o eth1 -j SNAT --to 1.2.4.0-1.2.4.32 --to 1.2.3.1
    فرض کنید ما میخواهیم به یک شبکه دیگر در vlan خودمون با آدرس 192.168.2.0/24 بدون انجام SNAT متصل شویم :
    کد:
    iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
    این دستور rule رو قبل از nat rule قرار میده پس اگر هر بسته ای از 192.168.1.0/24 برای 192.168.2.0/24 فرستاده شده این ruleاعمال میشه و زنجیره آنالیز بیشتر رو ادامه نمیده و SNAT صورت نمیگیره.
    تاج ملک ملوک , منشی شرکت , به درست کرن چای عالی معروفه ولی از وقتی عاشق IRC شده دیگه خبری از چای و ... نیست.مدیر نمیخواد اونو بندازه بیرون چون به چای تاج ملک ملوک معتاد شده(شاید علت دیگه داره!!) پس میاد پیش ما و درخواست میکنه تا این مشکل و حل کنیم.چند تا راه حل داریم :
    از بین بردن بسته هایی از کامپیوتر تاج ملک ملوک (192.168.1.31) که سعی در دسترسی به پورت های 6666 تا 6669 دارند در زنجیره POSTROUTING :
    کد:
    iptables -t nat -I POSTROUTING -s 192.168.1.31 -p tcp --dport 6666:6669 -j DROP
    یا از مدیر میپرسیم دوست داره تاج ملک ملوک چه کاری اجازه انجام داشته باشه , مدیر هم مثلا میگه فقط به وب دسترسی داشته باشه :
    کد:
    iptables -t nat -I POSTROUTING -s 192.168.1.31 -p tcp --dport 80 -j DROP
    این rule آدرس ip تاج ملک ملوک رو SNAT نخواهد کرد وقتی سعی در دسترسی به چیزی جز پورت 80 tcp داشته باشد.ولی همچنان به سرویس های udp دسترسی خواهد داشت.
    راه اندازی DNAT با iptables :
    ما همچنان با سناریو قبلی برای DNAT هم ادامه خواهیم داد.یک روز مدیر تماس میگیره و میگه که از خونه میخواد به کامیپوترش دسترسی داشته باشه.پر واضحه که اون الان نمی تونه دسترسی داشته باشه چون Ip کامپیوترش در اداره 192.168.1.50 هست.ما تصمیم گرفتیم که یکی از ip های معتبر رو برای کامپیوترشون اختصاص بدیم ولی اگر بیایم این ip رو به eth0 کامپیوتر مدیر واگذار کنیم هم چند Ip معتبر از دست میدیم هم مدیر به کامیپتر های داخل شبکه دیگه دسترسی نخواهد داشت.راه حل در ترجمه یک ip معتبر(1.2.4.1) به ip غیر معتبر (192.168.1.50) کامپیوتر مدیر میباشد.
    البته این معنیش DNAT ldfhan:
    کد:
    iptables -t nat -A PREROUTING -d 1.2.4.1 -j DNAT --to 192.168.1.50
    کار بعدی اینه که با مدیر تماس گرفته و پس از یه پاچه خواری تر وتمیز بهشون میگیم برای دسترسی به کامپیوترشون از ip آدرس 1.2.4.1 استفاده کنند.
    سرور داخلی ما ip آدرس 192.168.1.100 دارد.یکی از بر و بچ بخش مالی تماس میگیره و درخواست میکنه تا به سرور از خانه بتونه وصل بشه که شما چون وامتون تو نوبته ابن کا رو انجام میدید و ip معتبرشو (1.2.5.17) ازش میگیرید و میگید برای دسترسی از ip آدرس 1.2.4.2 استفاده کنه , ما هم این طور عمل میکنیم :
    کد:
    iptables -t nat -A PREROUTING -s 1.2.5.17 -d 1.2.4.2 -p tcp --dport 80 -j DNAT  --to 192.168.1.100
    ما میخوایم به سرور از طریق ssh از خارج از شرکت بتونیم وصل شیم ولی این کار خردمندانه ایی نیست که یه ip رو به Ip اون ترجمه کنیم چون ممکنه با پیدا شدن یک باگ در ssh سرور که برای ما حیاتی است رو در معرض خطر قرار بدهیم , پس بهترین کار اختصاص یک پورت با شماره بالا به ssh میباشد
    کد:
    iptables -t nat -A PREROUTING -d 1.2.4.2 -p tcp --dport 65521 -j DNAT --to 192.168.1.100:22
    با این روش اگر ما در شرکت نباشیم و احتیاج به ارتباط با سرور رو داریم یک ارتباط ssh به 1.2.4.2 با پورت 65521 برقرار میکنیم.
    فرض کنید یک وب سرور با ip آدرس 192.168.1.200 نصب کرده ایم. وب سرور [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید] هست و در DNS به 1.2.4.5 اشاره شده.برای در دسترس بودت از خارج از شبکه ما به طریق زیر عمل میکنیم :
    کد:
    iptables -t nat -A PREROUTING -d 1.2.4.5 -p tcp --dport 80 -j DNAT --to 192.168.1.200
    استفاده ازاسکرپیت:
    برای سناریو بالا از این اسکریپت استفاده کنید که با نیازهای خودتون میتونید هماهنگ کنید و تغییرات لازم رو انجام بدهید :
    کد:
    #!/bin/bash
     IP=/sbin/iptables
     #... some packet filtering rules
     ### NAT SECTION
     #first of all, we want to flush the NAT table
     $IP –t nat –F
     ############ SNAT PART
     #Taj malek molok's special rule.
     #Don't SNAT any TCP connections from her computer except www and all #udp connections except DNS
     $IP –t nat –A POSTROUTING –s 192.168.1.31 –p tcp –-dport ! 80 –j DROP
     $IP –t nat –A POSTROUTING –s 192.168.1.31 –p udp –-dport ! 53 –j DROP
     #Don't SNAT anything from 192.168.1.0/24 to 192.168.2.0/24
     $IP –t nat –A POSTROUTING –s 192.168.1.0/24 –d 192.168.2.0/24 –j ACCEPT
     #The boss needs DNAT but we should also SNAT her IP address to 1.2.4.1
     $IP –t nat –A POSTROUTING –s 192.168.1.50 –j SNAT –-to 1.2.4.1
     #Snat Everyone
     $IP –t nat –A POSTROUTING –s 192.168.1.0/24 –o eth1 –j SNAT –-to 1.2.4.0-1.2.4.32 –-to 1.2.3.1
     ############ DNAT PART
     #Dnat the boss so he can access her PC from home
     $IP –t nat –A PREROUTING –d 1.2.4.1 –j DNAT –-to 192.168.1.50
     #DNAT the intranet server for the guy in the financial department
     $IP –t nat –A PREROUTING –s 1.2.5.17 –d 1.2.4.2 –p tcp –-dport 80 –j DNAT -–to 192.168.1.100
     #DNAT for us to ssh into the intranet server
     $IP –t nat –A PREROUTING –d 1.2.4.2 –p tcp –-dport 65521 –j DNAT –-to 192.168.1.100:22
     #DNAT the web server
     $IP –t nat –A PREROUTING –d 1.2.4.5 –p tcp –-dport 80 –j DNAT –-to 192.168.1.200
     ### End of NAT section

    بررسی تنظیمات :
    برای بررسی ما نیاز داریم که زنجیره های جدول nat رو ببینیم :
    کد:
    root@router:~# iptables -t nat -L -n
     Chain PREROUTING (policy ACCEPT)
     target prot opt source destination
     DNAT all -- 0.0.0.0/0 1.2.4.1 to:192.168.1.50
     DNAT tcp -- 1.2.5.17 1.2.4.2 tcp dpt:80 to:192.168.1.100
     DNAT tcp -- 0.0.0.0/0 1.2.4.2 tcp dpt:65521 to:192.168.1.100:22
     DNAT tcp -- 0.0.0.0/0 1.2.4.5 tcp dpt:80 to:192.168.1.200
     ACCEPT tcp -- 192.168.1.50 0.0.0.0/0 tcp dpt:80
     REDIRECT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:80 redir ports 3128
     Chain POSTROUTING (policy ACCEPT)
     target prot opt source destination
     DROP tcp -- 192.168.1.31 0.0.0.0/0 tcp dpt:!80
     DROP udp -- 192.168.1.31 0.0.0.0/0 tcp dpt:!53
     ACCEPT all -- 192.168.1.0/24 192.168.2.0/24
     SNAT all -- 192.168.1.50 0.0.0.0/0 to:1.2.4.1
     SNAT all -- 192.168.1.0/24 0.0.0.0/0 to:1.2.4.0-1.2. 4.32 1.2.3.1
     Chain OUTPUT (policy ACCEPT)
     target prot opt source destination
     root@router:~#
    نوسنده :
    Lucian Gheorghe
    ترجمه* :
    رضا بهروزی
    [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید]
    reza@behroozi.info
    *لازم به توضیح هستش که ترجمه یک هنره و من این هنر و ندارم و فقط تلاش کردم این مطلب عالی رو به بهترین شکل که میتونم اینجا قرار بدم و جمله بندی و گاها انتخاب کلمات مناسبتر از ضعف های ترجمه و نوشته های من هست که اون هم بنظر من چندان مهم نیست چون شما اینجا به ادبستان نیومدیدبلکه به نتورکستان وارد شده اید :)
    ولی اگر کسی تمایل داره میتونه برای ویرایش نگارشی مطالب با من تماس بگیره
    [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید]

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    محل سکونت
    Advertising world
    نوشته ها
    Many
     

  3. #2
    RezaBehroozi admin آواتار ها
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Iran/Shiraz
    نوشته ها
    11,188
    تشکرها / پسندها

    پیش فرض

    اینم مقاله ای که روزهای اول سایت نوشتم

    برای راه اندازی nat این مراحل و طی میکنیم
    1)فعال کردن ip_forward
    این command رو بزنید
    cat /proc/sys/net/ipv4/ip_forward
    باید جواب 1 باشه اگه نبود اینو بزنید
    echo 1 > /proc/sys/net/ipv4/ip_forward

    2)iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    جای eth0 باید اینترفیسی که به اینترنت وصل هست باشه که اگه dialup هست ppp0 میشه

    خوب تا اینجا کار تمومه اگه firewall نداشته باشیم در غیر اینصورت باید
    3)iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    (فرض بر اینه که eth0 به اینترنت وصله و eth1 به شبکه داخلیمون)
    این دو command رو میزینیم
    4)تالا برای اینکه بعد از reboat کردن تنظیمات پاک نشه این کارو میکینم
    فابل /etc/sysconfig/iptables-config رو باز میکنیم و این مقادیر رو
    IPTABLES_MODULES_UNLOAD, IPTABLES_SAVE_ON_STOP, and IPTABLES_SAVE_ON_RESTART
    برابر با yes میکنیم
    [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید]

  4. #3
    RezaBehroozi admin آواتار ها
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Iran/Shiraz
    نوشته ها
    11,188
    تشکرها / پسندها

    پیش فرض

    commandهای کمکی
    iptables -L -t nat
    iptables -L INPUT
    iptables -L OUTPUT
    iptables -L FORWARD
    iptables -t nat -L -n -v -x
    [فقط اعضا می توانند لینک ها را مشاهده کنند برای ثبت نام اینجا را کلیک کنید]

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •