it-swarm-vi.com

Trả lời trên cùng một giao diện như đến?

Tôi có một hệ thống với hai giao diện. Cả hai giao diện được kết nối với internet. Một trong số chúng được đặt làm tuyến đường mặc định; Một tác dụng phụ của việc này là nếu một gói tin xuất hiện trên giao diện tuyến không mặc định, phản hồi sẽ được gửi lại qua giao diện tuyến mặc định. Có cách nào để sử dụng iptables (hoặc một cái gì đó khác) để theo dõi kết nối và gửi trả lời qua giao diện mà nó xuất phát không?

54
Shawn J. Goff
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> dev <interface> table isp2
ip route add default via <gateway_IP> dev <interface> table isp2

Ở trên không yêu cầu bất kỳ gói đánh dấu với ipfilter. Nó hoạt động vì các gói đi (trả lời) sẽ có địa chỉ IP ban đầu được sử dụng để kết nối với giao diện thứ 2 dưới dạng địa chỉ nguồn (từ) trên gói gửi đi.

64
Peter

Các lệnh sau tạo bảng định tuyến thay thế thông qua eth1 cho các gói có dấu 1 (ngoại trừ các gói đến localhost). Lệnh ip là từ bộ iproute2 (Ubuntu: iprouteCài đặt iproute http://bit.ly/software-small =, iproute-docCài đặt iproute-doc http://bit.ly/software-small ).

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1

Nửa còn lại của công việc là nhận ra các gói phải lấy dấu 1; sau đó sử dụng iptables -t mangle -A OUTPUT … -j MARK --set-mark 1 trên các gói này để chúng được định tuyến qua bảng định tuyến 1. Tôi nghĩ rằng những điều sau đây nên làm (thay thế 1.2.3.4 bằng địa chỉ của giao diện không định tuyến mặc định):

iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1

Tôi không chắc là đủ chưa, có thể cần một quy tắc khác trên các gói đến để báo cho mô-đun conntrack theo dõi chúng.

Tôi gặp vấn đề với các gói được tạo cục bộ với giải pháp được đề xuất bởi Peter, tôi đã thấy rằng các điều sau đây sửa:

echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 priority 900
ip rule add from dev <interface> table isp2 priority 1000
ip route add default via <gateway_IP> dev <interface> table isp2
ip route add <interface_prefix> dev <interface> proto static scope link src <interface_IP> table isp2

LƯU Ý : Bạn có thể gặp phải các vấn đề cú pháp với dòng thứ 4 ở trên. Trong các trường hợp như vậy, cú pháp cho lệnh thứ 4 có thể là ngay bây giờ:

ip rule add iif <interface> table isp2 priority 1000
5
Héctor Sánchez

Tôi giả sử bạn đang chạy Linux và hơn nữa, bạn đang sử dụng bản phân phối dựa trên RedHat/CentOS. Các bản phân phối và Unix khác sẽ yêu cầu các bước tương tự - nhưng các chi tiết sẽ khác nhau.


Bắt đầu bằng cách kiểm tra (lưu ý rằng điều này rất giống với câu trả lời của @ Peter. Tôi giả sử như sau:

  • eno0 là isp0 và có cổng mặc định tổng thể
  • eno1 là isp1 và có IP/phạm vi 192.168.1.2/24 với cổng 192.168.1.1

Các lệnh như sau:

$ echo 200 isp1 >> /etc/iproute2/rt_tables
$ ip rule add from eno1 table isp1
$ ip route add default via 192.168.1.1 dev eno1 table isp1

Tường lửa không liên quan đến bất kỳ cách nào. Trả lời các gói sẽ luôn được gửi từ IP chính xác - nhưng trước đó đã được gửi qua giao diện sai. Bây giờ các gói từ IP chính xác sẽ được gửi qua giao diện chính xác.


Giả sử các công việc trên, bây giờ bạn có thể làm cho quy tắc và lộ trình thay đổi vĩnh viễn. Điều này phụ thuộc vào phiên bản Unix bạn đang sử dụng. Như trước đây, tôi đang giả sử một bản phân phối Linux dựa trên RH/CentOS.

$ echo "from eno1 table isp1" > /etc/sysconfig/network-scripts/rule-eno1
$ echo "default via 192.168.1.1 dev eno1 table isp1" > /etc/sysconfig/network-scripts/route-eno1

Kiểm tra sự thay đổi mạng là vĩnh viễn:

$ ifdown eno1 ; ifup eno1

Nếu điều đó không hiệu quả, trên các phiên bản sau của RH/CentOS, bạn cũng cần thực hiện một trong hai tùy chọn:

  • Không sử dụng mặc định NetworkManager.service; Sử dụng network.service thay vào đó. Tôi đã không khám phá các bước chính xác cần thiết cho việc này. Tôi sẽ tưởng tượng nó liên quan đến các lệnh chkconfig hoặc systemctl để bật/tắt dịch vụ.
  • Cài đặt gói NetworkManager-distatcher-định tuyến-quy tắc

Cá nhân tôi thích cài đặt gói quy tắc hơn vì đây là cách tiếp cận được hỗ trợ đơn giản hơn:

$ yum install NetworkManager-dispatcher-routing-rules

Một khuyến nghị mạnh mẽ khác là cho phép lọc arp vì điều này ngăn chặn các vấn đề liên quan khác với cấu hình mạng kép. Với RH/CentOS, hãy thêm nội dung sau vào tệp /etc/sysctl.conf:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1
3
zaTricky