Chuyển hướng lưu lượng truy cập từ một IP và cổng sang một IP và cổng khác

Một điều gì đó rất phổ biến khi quản lý các máy chủ đang chuyển hướng lưu lượng truy cập.

Giả sử chúng ta có một máy chủ với các dịch vụ nhất định đang chạy, nhưng vì lý do gì đó mà chúng ta thay đổi một trong các dịch vụ đó (Tôi không biết, ví dụ pop3 là cổng 110) đến một máy chủ khác. Thông thường và thường xuyên nhất sẽ chỉ là thay đổi IP trong bản ghi DNS, tuy nhiên nếu ai đó đang sử dụng IP thay vì tên miền phụ thì điều đó sẽ bị ảnh hưởng.

Để làm gì? ... đơn giản, chuyển hướng lưu lượng mà máy chủ nhận được qua cổng đó đến máy chủ khác có cùng cổng.

server-node-lan-ethernet

Làm thế nào để chúng tôi bắt đầu chuyển hướng lưu lượng truy cập?

Điều đầu tiên là chúng ta phải bật chuyển tiếp trên máy chủ, đối với điều này, chúng tôi sẽ đặt như sau:

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

Tất cả các lệnh hiển thị trong hướng dẫn này phải được thực thi với đặc quyền quản trị, tôi khuyên bạn nên thực thi chúng trực tiếp với người dùng root.

Bạn cũng có thể sử dụng lệnh khác này, trong trường hợp lệnh trước đó không hoạt động với bạn (nó đã xảy ra với tôi như thế này trên CentOS):
sysctl net.ipv4.ip_forward=1
Sau đó, chúng tôi sẽ khởi động lại mạng:

service networking restart

Trong các bản phân phối RPM như CentOS và các bản khác, nó sẽ là:

service nertwork restart

Bây giờ chúng ta sẽ chuyển sang điều quan trọng, thông báo cho máy chủ thông qua iptables chuyển hướng cái gì:

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

Đó là, và theo ví dụ tôi đã đề cập, giả sử chúng tôi muốn chuyển hướng tất cả lưu lượng mà máy chủ của chúng tôi nhận được qua cổng 110 đến một máy chủ khác (ví dụ: 10.10.0.2), sẽ vẫn nhận được lưu lượng truy cập đó đến 110 (nó là cùng một dịch vụ):

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

Máy chủ 10.10.0.2 sẽ thấy rằng tất cả các gói hoặc yêu cầu đến từ IP của máy khách, trong trường hợp họ muốn chuyển các yêu cầu, tức là máy chủ thứ 2 thấy rằng các yêu cầu đến bằng IP của máy chủ thứ nhất (và trong mà chúng tôi áp dụng chuyển hướng), nó cũng sẽ là đặt dòng thứ hai này:

iptables -t nat -A POSTROUTING -j MASQUERADE

Một số câu hỏi và câu trả lời

Trong ví dụ, tôi đã sử dụng cùng một cổng cả hai lần (110), tuy nhiên chúng có thể chuyển hướng lưu lượng từ cổng này sang cổng khác mà không gặp vấn đề gì. Ví dụ: giả sử tôi muốn chuyển hướng lưu lượng truy cập từ cổng 80 đến 443 trên một máy chủ khác, nó sẽ là:

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

Đây là iptables, họ có thể sử dụng tất cả các tham số khác mà chúng tôi biết, ví dụ: nếu chúng tôi chỉ muốn chuyển hướng lưu lượng truy cập từ một IP cụ thể, thì sẽ bằng cách thêm -s … Ví dụ, tôi sẽ chỉ chuyển hướng lưu lượng truy cập đến từ 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

Hoặc toàn bộ mạng (/ 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

Chúng tôi cũng có thể chỉ định giao diện mạng với -i :

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

Kết thúc!

Điều này như tôi đã nói rồi, là iptables, bạn có thể áp dụng những gì đã biết để máy chủ thực hiện chính xác những gì bạn muốn 😉

Chúc mừng!

Máy chủ chuyên dụng_SubImage


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   Fer dijo

    Chúng ta cũng có thể làm điều này từ tường lửa cho phép chuyển tiếp cổng, phải không? (áp dụng các quy tắc tương ứng).

    1.    KZKG ^ Gaara dijo

      Tất nhiên là có, cuối cùng thì một bức tường lửa như Pfsense hoặc những cái khác, sử dụng iptables từ phía sau.

      1.    thợ săn dijo

        Chính xác thì pfsense không sử dụng iptables mà là pf, hãy nhớ rằng nó là một bsd bên trong.

        1.    KZKG ^ Gaara dijo

          Ôi đúng, tệ hại của tôi!

  2.   Nicolas dijo

    Cảm ơn bạn rất nhiều vì mẹo 🙂

    Tôi có một vài nghi ngờ:
    1 - Thay đổi có vĩnh viễn không? hay bị mất khi khởi động lại máy chủ?
    2 - Tôi có nhiều trường hợp (giả sử A, B và C) trên cùng một mạng con. Trong trường hợp A, tôi áp dụng quy tắc để định tuyến lưu lượng truy cập đến một IP bên ngoài và thử nghiệm với các phần mềm từ trường hợp B và C, mọi thứ đều hoạt động kỳ diệu. Vấn đề là từ trường hợp A, nó không hoạt động. Tôi đã thử sử dụng cả ip của bạn và giao diện loopback, và cả hai đều không hoạt động:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-destination xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) Không kết nối được với cổng ip-yyyy 8080: Kết nối bị từ chối
    $ curl localhost: 8080 / hello_world
    curl: (7) Không kết nối được với cổng localhost 8080: Kết nối bị từ chối

    Bất kỳ ý tưởng những gì vấn đề có thể là?

    1.    KZKG ^ Gaara dijo

      Có, thay đổi bị mất khi khởi động lại, bạn sẽ phải sử dụng iptables-save & iptables-restore hoặc những thứ tương tự để tránh điều đó.
      Tôi không hiểu bạn muốn làm gì, ví dụ A?

      1.    Nicolas dijo

        Tôi có một máy chủ chỉ hỗ trợ kết nối từ một ip cụ thể (của máy chủ A), tôi không thể hoặc muốn thêm nhiều ips vào danh sách trắng (đối với các vấn đề về khả năng mở rộng), vì vậy tôi muốn tất cả lưu lượng truy cập đến máy chủ bên ngoài cho biết máy chủ (A).
        Đối với vấn đề thực tế, tôi có các cấu hình chung xác định IP nào sẽ sử dụng cho từng dịch vụ, vì vậy trong trường hợp này, nó giống như "mọi người muốn sử dụng dịch vụ bên ngoài phải sử dụng IP A"
        Tôi đã đạt được điều này thành công bằng cách sử dụng phương pháp trong bài viết này, nhưng tôi gặp phải vấn đề là khi áp dụng nó, máy chủ A không thể truy cập dịch vụ bằng ip của chính nó (nhưng tất cả các máy chủ khác thì có).
        Cho đến nay, điều tốt nhất tôi tìm thấy là thêm ánh xạ vào tệp / etc / hosts của máy chủ A, trỏ đến ip bên ngoài, ghi đè cài đặt chung.

  3.   braybaut dijo

    Rất tốt, nếu tôi có một máy chủ thư khác, tôi có thể chuyển tiếp lưu lượng truy cập từ cổng 143 từ server1 sang server2 và các email sẽ đến server2, phải không?

    Liên quan

    1.    KZKG ^ Gaara dijo

      Về lý thuyết là có, nó hoạt động như thế này. Chắc chắn, bạn phải cài đặt đúng máy chủ thư trên server2 🙂

  4.   msx dijo

    Loại bài viết mà chúng tôi muốn đọc, cảm ơn bạn!

  5.   Abraham Ibarra dijo

    Bài viết tuyệt vời, tôi có một dự án mà tôi đang làm việc và tôi muốn hỏi bạn một câu hỏi, có các thiết bị chuyển mạch công nghiệp có chức năng NAT (tôi cho rằng chúng sử dụng IPTables bên dưới), để dịch một địa chỉ IP mà không cần thực hiện thay đổi đối với thiết bị, ví dụ: Tôi có Máy chủ 10.10.2.1 giao tiếp với các máy tính 10.10.2.X và thông qua bộ chuyển mạch được lập trình để máy tính có địa chỉ 192.168.2.4 thực sự được nhìn thấy từ máy chủ là 10.10.2.5, nó dịch địa chỉ IP đó sẽ được nhìn thấy Từ các máy tính khác có địa chỉ đó, tôi muốn thực hiện việc đó từ máy chủ có Ubuntu hoặc bản phân phối khác, quy tắc iptables sẽ như thế nào?

  6.   kuk dijo

    Thông tin rất tốt cảm ơn bạn ^ _ ^

  7.   yisus dijo

    Xin chào buổi chiều.
    Tôi gặp sự cố khi cố gắng chuyển hướng. Tôi giải thích:
    Tôi có một máy chủ proxy trong Ubuntu, với 2 thẻ mạng:
    eth0 = 192.168.1.1 được kết nối với phần còn lại của mạng cục bộ.
    eth1 = 192.168.2.2 được kết nối với bộ định tuyến.
    Tôi cần mọi thứ đi qua eth0 để đi qua eth1 và cả qua proxy (tôi sử dụng Squid, có cổng mặc định là 3128) và tôi không thể tìm thấy khóa trong cấu hình IPTABLES.
    Tôi không cần hạn chế dưới bất kỳ hình thức nào, chỉ có một bản ghi vẫn còn trong nhật ký của các địa chỉ web được truy cập.

    Tôi hy vọng bạn có thể giúp tôi vì đây là một công việc khá nặng nề đã khiến tôi lo lắng trong vài ngày.

    Cảm ơn bạn.

  8.   Gabriel dijo

    Bạn ơi, mình mới làm quen với các máy chủ khác, mình không biết nhưng mình hiểu chủ đề và mình học nhanh, câu hỏi của mình là sau đây mình có 2 máy chủ là serv_1 và serv_2 mà mình đã kết nối với cùng một mạng nội bộ, trong các máy chủ này mình đã thiết lập owncloud, Tôi muốn làm như sau:

    rằng một phạm vi ips nhất định, ví dụ rangeip_1 khi đặt ip truy cập vào owncloud (ipowncloud) sẽ được hướng tới serv_1 và nếu là một rangeip_2 khác được đặt cùng một ipowncloud sẽ được chuyển hướng đến serv_2, điều này để 2 máy chủ được đặt ở hai thành phố khác nhau và phạm vi IP khác nhau nhưng tất cả chúng đều nằm trên cùng một mạng, đó sẽ là phần đầu tiên, phần thứ hai sẽ rõ ràng là đồng bộ hóa 2 máy chủ này để chúng là máy nhân bản hoặc họ khuyên tôi điều này để tối ưu hóa chiều rộng ban nhạc, làm ơn, nếu bạn sẽ giải thích cho tôi làm thế nào để làm điều đó từng bước để không chuyển sang chế độ siêu lập trình viên = (

  9.   Antonio Carrizosa dijo

    Xin chào, thứ lỗi cho tôi, tôi có một công tắc phụ trách giao tiếp của tất cả các thiết bị tạo nên mạng của tôi, sau đó là tường lửa và cuối cùng là lối ra Internet, điều xảy ra là tôi muốn chuyển hướng được cung cấp trong chuyển đổi và không phải truy cập tường lửa trừ khi dịch vụ được yêu cầu là internet.

  10.   John dijo

    Sử dụng phương pháp này, bạn có thể chuyển hướng HTTPS sang HTTP không?

  11.   mati dijo

    Chào bạn, có lẽ hơi muộn nhưng mình muốn hỏi bạn là làm cách nào để mực không sửa đổi IP của máy khách khi muốn kết nối với máy chủ web trên cùng mạng?

  12.   lafat32 dijo

    Đừng đối xử tệ với tôi vì đã hỏi. Điều này có thể được thực hiện trong Windows không?

  13.   một giống én dijo

    Thông tin này hữu ích cho tôi. Như mọi khi, các bạn có thể được tin tưởng, khi tôi không thể tìm thấy thứ gì đó bằng tiếng Anh, tôi thường tìm kiếm bằng tiếng Tây Ban Nha, vào những dịp đó, tôi hầu như luôn truy cập trang web này.

  14.   Seba dijo

    Tôi có một bộ định tuyến 4G là một ứng dụng khách của mạng mà tôi không quản lý (rõ ràng, tôi là một khách hàng)… bộ định tuyến này là một cổng vào mạng từ xa đó thông qua OpenVPN. Ngoài ra, bộ định tuyến cho biết thực hiện chức năng chuyển tiếp cổng để truy cập cổng 80 của máy chủ của một trong những mạng con đó trong lĩnh vực này.

    Đây là khai báo mà tôi phải đặt trong bộ định tuyến làm quy tắc tùy chỉnh tường lửa «-t nat -A POSTROUTING -j MASQUERADE»

    Cảm ơn đã giúp đỡ!