Hai giao diện, hai địa chỉ, hai cổng?


14

Tôi có một hệ thống có hai giao diện mạng với các địa chỉ IP khác nhau, cả hai đều nằm trong dải địa chỉ công cộng (mặc dù thông qua NAT trong trường hợp đầu tiên) và cả hai đều có các cổng khác nhau. (Câu chuyện dài, nó dành cho mục đích thử nghiệm)

Vấn đề là ngay bây giờ, nếu tôi cố gắng ping địa chỉ trên giao diện thứ hai, tuyến đường mặc định sẽ chỉ ra qua giao diện đầu tiên - và không bao giờ đến đúng cách.

Có thể đảm bảo rằng các phản hồi luôn xuất hiện trên cùng một giao diện mạng (và với cùng một nguồn IP) khi chúng xuất hiện không? Và nếu vậy thì thế nào?


1
Có thể một số biến thể về điều này: unix.stackexchange.com/questions/4420/ triệt
Shawn J. Goff

Câu trả lời:


16

Bạn đang hiểu sai vấn đề. Không phải mọi gói đều là một phản hồi và không phải mọi gói đều có thể được khớp với một số gói khác sao cho "cùng một giao diện mạng khi chúng xuất hiện" có ý nghĩa. Những gì bạn muốn làm là chọn cổng cho một gói dựa trên địa chỉ IP nguồn của nó.

Điều này được gọi là định tuyến dựa trên nguồn hoặc định tuyến chính sách. Bạn có thể làm điều đó với một quy tắc đơn giảniptables , nhưng cách tốt nhất là thiết lập hai bảng định tuyến, một bảng cho mỗi địa chỉ nguồn công khai:

Đầu tiên, tạo hai bảng (Thay thế <NAME1> và <NAME2> bằng tên hợp lý cho hai nhà cung cấp của bạn, giống với IP1, DEV1, v.v.):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

Thêm một cổng vào mỗi bảng định tuyến (nếu cần):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

Sau đó, một tuyến đường mặc định:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

Sau đó, các quy tắc để chọn bảng tuyến dựa trên địa chỉ nguồn:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

Xem Định tuyến cho nhiều đường lên / nhà cung cấp để biết thêm chi tiết.


Bạn đã viết: 'Không phải mọi gói đều là phản hồi và không phải gói nào cũng có thể được khớp với một số gói khác sao cho "cùng giao diện mạng khi chúng xuất hiện" có ý nghĩa. 'Bạn có thể giải thích điều này hơn nữa? Tôi hiểu rằng, không phải mọi gói đều là phản hồi và không phải gói nào cũng có thể được khớp với gói "nguồn" khác. Nếu chúng tôi loại trừ các gói này khỏi xem xét, vì chúng không gây ra bất kỳ vấn đề nào và do đó không liên quan đến chúng tôi, tại sao các gói còn lại không thể được chuyển đến "giao diện mạng giống như khi chúng xuất hiện"?
Andrew Savinykh

@AndrewSavinykh Điều đó sẽ không giải quyết được tất cả vấn đề. Cụ thể, nó sẽ phá vỡ bất cứ khi nào một gói tin bên ngoài có nguồn gốc cục bộ (chẳng hạn như yêu cầu ping ra) đi ra ngoài giao diện sai cho địa chỉ IP nguồn của nó và bị loại bỏ bởi cổng. Vấn đề là, như tôi đã giải thích, thực sự về việc đảm bảo các gói đi ra khỏi cổng tương ứng với địa chỉ IP nguồn của chúng.
David Schwartz

David, tôi muốn đạt được điều tương tự như OP nhưng tôi không thể. Tôi đã đăng một câu hỏi ở đây: serverfault.com/questions/992624/ , sẽ rất tuyệt nếu bạn có thể xem
Housemd

6

Câu trả lời của David Schwartz là tuyệt vời, nhưng bạn có thể đơn giản hóa các quy tắc định tuyến một chút bằng cách chỉ có một bảng phụ và sử dụng tuyến đường mặc định của mình cho bảng khác. Tôi có một máy chủ đằng sau hai cổng NAT và gần đây tôi đã trải qua quá trình tái tạo kịch bản đó giữa một loạt các máy ảo. Tôi /etc/network/interfacestrông như thế này:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(đây là một thiết lập trong đó hai ISP là Optus và iiNet, do đó tên bảng là 'optus')

Điều này, cộng với dòng trong /etc/iproute2/rt_tablesviệc tạo bảng, nên là tất cả những gì bạn cần. Bạn sẽ có hai địa chỉ IP; lưu lượng truy cập từ 192.168.13.13 sẽ đi qua 192.168.13.11 và lưu lượng từ 192.168.13.213 sẽ đi qua 192.168.13.10. Định cấu hình hai cổng đó để chuyển tiếp cổng của chúng một cách thích hợp (192.168.13.11 chuyển tiếp công cụ sang 192.168.13.13 và 192.168.13.10 chuyển tiếp công cụ sang 192.168.13.213) và phần còn lại sẽ tự xử lý.

Bạn có thể cần phải điều chỉnh mọi thứ một chút cho tình huống của mình, vì bạn đang sử dụng IP công khai trực tiếp, nhưng một cái gì đó như thế này vẫn sẽ hoạt động. Ngoài ra, việc thực hiện những điều này sẽ dễ dàng hơn rất nhiều /etc/network/interfacesvà sau đó git-quản lý tệp đó, thay vì cố gắng nhớ cách bạn đã thiết lập, hai năm sau khi hệ thống phải được khởi động lại!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.