Giả sử tôi có hai địa chỉ mạng công cộng trên máy chủ của mình: một NAT thông qua ISP (192.168.99.0/24) và VPN thông qua một ISP khác (192.168.1.0/24), đã được định cấu hình với tuyến đường theo máy chủ đến Máy chủ VPN thông qua ISP của tôi.
Đây là bảng định tuyến ban đầu của tôi. Tôi hiện đang định tuyến qua ISP của mình trên mạng con 192.168.99.0/24.
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.99.1 0.0.0.0 UG 0 0 0 eth1
55.66.77.88 192.168.99.1 255.255.255.255 UGH 0 0 0 eth1
192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
Bây giờ, tôi muốn các kết nối TCP mới chuyển sang 192.168.1.0/24 của mình vì vậy tôi gõ như sau:
$ route add -net 0.0.0.0 gw 192.168.1.1 dev tap0
Khi tôi làm điều này, nó khiến một số kết nối TCP lâu đời bị treo. Có cách nào để tôi thay đổi giao diện mặc định một cách an toàn cho các kết nối mới, đồng thời cho phép các kết nối TCP hiện tại sử dụng tuyến cũ (nghĩa là tôi cần kích hoạt một số loại bảng định tuyến trạng thái)?
Tôi ổn với một giải pháp chỉ hoạt động với các kết nối TCP đã được thiết lập và tôi không quan tâm đến việc hack nó như thế nào. Ví dụ: nếu có một cách để thêm các quy tắc iptables tạm thời cho các kết nối hiện có để buộc chúng trên tuyến đường cũ. Nhưng phải có một số cách để làm điều này.
EDIT: Chỉ là một lưu ý về một "lộ trình thêm -host ..." đơn giản cho các kết nối hiện có: giải pháp này sẽ hoạt động nếu tôi ổn với việc để lại một tập hợp IP trên giao diện cũ. Tuy nhiên, trong ứng dụng của tôi, điều này thực sự không giải quyết được vấn đề của tôi vì tôi muốn cho phép các kết nối mới xuất hiện trên giao diện mới ngay cả khi chúng có cùng IP nguồn. Bây giờ tôi đang xem xét sử dụng lệnh "ip route" để đặt quy tắc định tuyến dựa trên nguồn.