הפנה מחדש תעבורה מ- IP אחד ויציאה ל- IP ונמל אחר

משהו נפוץ מאוד בניהול שרתים הוא הפניית תעבורה מחדש.

נניח שיש לנו שרת עם שירותים מסוימים הפועלים, אך מכל סיבה שהיא אנו משנים אחד משירותים אלה (אני לא יודע, למשל pop3 שהוא יציאה 110) לשרת אחר. הדבר הרגיל והנפוץ ביותר יהיה פשוט לשנות את ה- IP ברשומת ה- DNS, אולם אם מישהו משתמש ב- IP במקום בתת-הדומיין זה יושפע.

מה לעשות? ... פשוט, הפנה את התעבורה שהשרת מקבל דרך יציאה זו לשרת אחר עם אותו יציאה.

שרת-צומת- lan-ethernet

כיצד נתחיל להפנות מחדש את התנועה?

הדבר הראשון הוא שבוודאי אפשרנו את ה- העברה בשרת, לשם כך אנו שמים את הדברים הבאים:

echo "1" > /proc/sys/net/ipv4/ip_forward

יש לבצע את כל הפקודות המוצגות במדריך זה עם הרשאות ניהול, אני ממליץ לבצע אותן ישירות עם משתמש השורש.

אתה יכול גם להשתמש בפקודה אחרת זו, במקרה שהקודמת לא עובדת עבורך (זה קרה לי ככה ב- CentOS):
sysctl net.ipv4.ip_forward=1
ואז נפעיל מחדש את הרשת:

service networking restart

בהפצות סל"ד כמו CentOS ואחרות, זה יהיה:

service nertwork restart

עכשיו נעבור לדבר החשוב, נגיד לשרת דרך iptables מה להפנות:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

במילים אחרות, ובעקבות הדוגמה שהזכרתי, נניח שאנחנו רוצים להפנות את כל התעבורה שהשרת שלנו מקבל דרך יציאה 110 לשרת אחר (למשל: 10.10.0.2), שעדיין יקבלו את התנועה דרך 110 (זה אותו שירות):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

השרת 10.10.0.2 יראה שכל החבילות או הבקשות מגיעות מ- IP של הלקוח, למקרה שהם רוצים לשחות את הבקשות, כלומר שהשרת השני יראה שהבקשות מגיעות עם ה- IP של השרת הראשון (וב אשר אנו מיישמים את ההפניה מחדש), יהיה זה גם לשים את השורה השנייה הזו:

iptables -t nat -A POSTROUTING -j MASQUERADE

כמה שאלות ותשובות

בדוגמה השתמשתי באותו יציאה בשתי הפעמים (110), אולם הם יכולים להפנות תנועה מנמל אחד לאחר ללא בעיות. לדוגמא, נניח שאני רוצה להפנות תנועה מיציאה 80 ל- 443 בשרת אחר, בשביל זה זה יהיה:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

זהו iptables, הם יכולים להשתמש בכל שאר הפרמטרים שאנו מכירים, למשל, אם אנו רוצים להפנות רק תנועה מ- IP ספציפי, זה יהיה על ידי הוספת- s ... לדוגמא אני ינתב רק את התנועה שמגיעה מ 10.10.0.51:

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

או רשת שלמה (/ 24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

אנו יכולים גם לציין את ממשק הרשת עם -i :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

הסוף!

זה כפי שכבר אמרתי, הוא iptables, אתה יכול ליישם את מה שכבר ידוע כדי שהשרת יעשה בדיוק את מה שאתה רוצה שיעשה 😉

ברכות!

DedicatedServer_SubImage


תוכן המאמר עומד בעקרונותינו של אתיקה עריכתית. כדי לדווח על שגיאה לחץ כאן.

19 תגובות, השאר את שלך

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   Fer דיג'ו

    אנחנו יכולים לעשות זאת גם מחומת אש המאפשרת העברת יציאות, נכון? (החלת הכללים המתאימים).

    1.    KZKG ^ גאארה דיג'ו

      כן כמובן, בסופו של דבר חומת אש כמו Pfsense או אחרים, השתמשו ב- iptables מאחור.

      1.    מטלטל דיג'ו

        ליתר דיוק, pfsense לא משתמשת ב- iptables אלא ב- pf, זכור שמדובר ב- bsd בפנים.

        1.    KZKG ^ גאארה דיג'ו

          אה נכון, רע שלי!

  2.   ניקולא דיג'ו

    תודה רבה על הטיפ 🙂

    יש לי כמה ספקות:
    1 - האם השינוי הוא קבוע? או שהוא אבוד בעת הפעלת השרת מחדש?
    2 - יש לי מספר מקרים (נניח A, B ו- C) באותה רשת משנה. למשל A אני מיישם את הכלל לניתוב תעבורה ל- IP חיצוני, ובדיקה עם תלתלים ממופעים B ו- C, הכל עושה פלאים. הבעיה היא שממופע A זה לא עובד. ניסיתי להשתמש גם ב- ip שלך וגם בממשק loopback, ואף אחד מהם לא עובד:
    $ iptables -t nat -A PREROUTING -p tcp -port 8080 -j DNAT-ליעד xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT – ליעד xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    תלתל: (7) ההתחברות ליציאת ip-yyyy 8080 נכשלה: החיבור נדחה
    $ curl localhost: 8080 / hello_world
    תלתל: (7) ההתחברות ליציאת localhost 8080 נכשלה: החיבור נדחה

    יש לך מושג מה הבעיה?

    1.    KZKG ^ גאארה דיג'ו

      כן, השינוי אבד בעת אתחול מחדש, יהיה עליכם להשתמש ב- iptables-save & iptables-שחזור או משהו כזה כדי להימנע מכך.
      לא ממש הבנתי מה אתה רוצה לעשות, למשל A?

      1.    ניקולא דיג'ו

        יש לי שרת שתומך רק בחיבורים מ ip מסוים (שרתים A), אני לא יכול או רוצה להוסיף עוד ips לרשימת ההיתרים (לבעיות מדרגיות), אז אני רוצה שכל התעבורה לשרת החיצוני תעבור אמר השרת (A).
        לעניין המעשי, יש לי תצורות גלובליות המגדירות באיזו IP להשתמש לכל שירות, כך שבמקרה זה זה משהו כמו "כל מי שרוצה להשתמש בשירות החיצוני חייב להשתמש ב- IP A"
        זה הושג בהצלחה באמצעות השיטה במאמר זה, אך אני נתקל בבעיה שכאשר מיישמים אותו, שרת A אינו יכול לגשת לשירות באמצעות ip משלו (אך כל השרתים האחרים כן).
        עד כה הטוב ביותר שמצאתי היה להוסיף את המיפוי בקובץ השרת / A / etc / hosts, כשהוא מצביע על ה- IP החיצוני, מבטל את ההגדרה הגלובלית.

  3.   ברייבוט דיג'ו

    טוב מאוד, אם יש לי שרת דואר אחר, אוכל להעביר את התנועה מיציאה 143 משרת 1 לשרת 2 והדואר האלקטרוני יגיע לשרת 2, נכון?

    לגבי

    1.    KZKG ^ גאארה דיג'ו

      בתיאוריה כן, זה עובד ככה. בטח, עליך להתקין כראוי את שרת הדואר בשרת 2 🙂

  4.   MSX דיג'ו

    סוג הפוסטים שאנחנו אוהבים לקרוא, תודה!

  5.   אברהם איברה דיג'ו

    מאמר מצוין, יש לי פרויקט בו אני עובד ורציתי לשאול אותך שאלה, ישנם מתגים תעשייתיים עם פונקציית NAT (אני מניח שהם משתמשים בטבלאות IP בהמשך), לתרגם כתובת IP מבלי לבצע שינויים בציוד, לדוגמא, יש לי שרת 10.10.2.1 המתקשר עם מחשבי 10.10.2.X ודרך המתג מתוכנת כך שמחשב שיש לו כתובת 192.168.2.4 נראה למעשה מהשרת כ- 10.10.2.5, זה תרגם את כתובת ה- IP שנראית מהמחשבים האחרים עם כתובת זו, אני רוצה לעשות זאת משרת עם אובונטו או הפצה אחרת, מה יהיו כללי ה- iptables?

  6.   Kuk דיג'ו

    מידע טוב מאוד תודה ^ _ ^

  7.   ייסוס דיג'ו

    צָהֳרַיִים טוֹבִים.
    יש לי בעיה לנסות לבצע הפניה מחדש. אני מסביר:
    יש לי שרת פרוקסי באובונטו, עם שני כרטיסי רשת:
    eth0 = 192.168.1.1 מחובר לשאר הרשת המקומית.
    eth1 = 192.168.2.2 מחובר לנתב.
    אני זקוק לכל מה שמגיע דרך eth0 כדי לעבור דרך eth1, וגם דרך ה- proxy (אני משתמש ב- Squid, שהיציאה המוגדרת כברירת מחדל היא 3128), ואני לא מוצא את המפתח בתצורת IPTABLES.
    אני לא זקוק להגבלה מכל סוג שהוא, אלא רק שרשומה תישאר ביומן כתובות האינטרנט שבהן ביקרת.

    אני מקווה שתוכלו לעזור לי מכיוון שזו משימה מסורבלת למדי שמדאיגה אותי כבר כמה ימים.

    תודה.

  8.   גבריאל דיג'ו

    חבר, אני מאוד חדש בשרתים אחרים, אין לי מושג אבל אני מבין את הנושא ואני לומד במהירות, השאלה שלי היא הבאה שיש לי 2 שרתים serv_1 ו- serv_2 שחיברתי לאותו אינטראנט, בשרתים האלה יש לי הגדרת מטבע עצמי, ברצוני לעשות את הפעולות הבאות:

    כי טווח מסוים של ips למשל rangeip_1 בעת הצבת ip גישה ל- owncloud (ipowncloud) מופנה כלפי serv_1 ואם מדובר בטווח אחר rangeip_2 ממוקם אותו ipowncloud מופנה ל serv_2, זאת על מנת שני השרתים ממוקמים בשתי ערים שונות וטווחי ה- IP שונים אך כולם באותה רשת, זה יהיה החלק הראשון, השני יהיה ברור לסנכרן את שני השרתים האלה כך שהם יהיו מראות או שיעצו לי זאת בכדי לייעל את הרוחב הלהקה, בבקשה, אם אתה מתכוון להסביר לי איך לעשות זאת צעד אחר צעד לא למתכנת סופר = =

  9.   אנטוניו קרריזוזה דיג'ו

    שלום, תסלח לי, יש לי מתג שאחראי על התקשורת של כל המכשירים שמרכיבים את הרשת שלי, ואחרי זה חומת אש ולבסוף יציאת האינטרנט, מה שקורה זה שהייתי רוצה שניתנה ההפניה מחדש ב לעבור ולא צריך להגיע לחומת האש אלא אם כן השירות המבוקש הוא אינטרנט.

  10.   ג'ון דיג'ו

    באמצעות שיטה זו תוכל להפנות מחדש את HTTPS ל- HTTP?

  11.   מתי דיג'ו

    היי, אולי זה קצת מאוחר, אבל רציתי לשאול אותך, כיצד עלי לגרום ל Squid שלא לשנות את ה- IP של הלקוח כשאני רוצה להתחבר לשרת אינטרנט באותה רשת?

  12.   לפאט 32 דיג'ו

    אל תתייחס אליי כשאני מבקש. האם ניתן לעשות זאת ב- Windows?

  13.   סנונית דיג'ו

    מידע זה היה שימושי עבורי. כמו תמיד, אפשר לסמוך עלכם, כשאני לא מוצא משהו באנגלית אני בדרך כלל מסתכל בספרדית, באותם הזדמנויות כמעט תמיד אני מגיע לאתר הזה. תודה.