Theo như tôi biết thì không có tính năng nào cho phép chuyển đổi hai bảng định tuyến trong Linux cũng như không thay thế nguyên tử một quy tắc định tuyến hiện có. Vẫn có thể đạt được một công tắc nguyên tử như được trình bày bên dưới. Tất cả các môn thể dục với các quy tắc trung gian là thực sự nguyên tử ở bất kỳ bước nào mà không có bất kỳ dấu hiệu báo trước nào. Đối với tất cả ý định và mục đích, các đi đến
các quy tắc dưới đây là tùy chọn và tính nguyên tử gần như vẫn sẽ đạt được nếu không có chúng.
Thuật toán:
trạng thái trước đó:
Bảng định tuyến 1000 đã được thêm vào cũng như quy tắc có tùy chọn 20000 thực hiện tra cứu trên bảng này (không có bộ chọn ở đây vì thông tin này không có sẵn từ OP):
quy tắc $ ip -4
0: từ tất cả tra cứu cục bộ
20000: từ tất cả tra cứu 1000
32766: từ tất cả tra cứu chính
32767: từ tất cả tra cứu mặc định
sự chuẩn bị:
Bảng định tuyến 1001 được chuẩn bị trước với một vài tuyến ip thêm ... bảng 1001
mệnh lệnh. Vì không có quy tắc nào đề cập đến nó nên nó vẫn không hoạt động. Đó là bảng định tuyến sẽ thay thế bảng định tuyến 1000.
thêm quy tắc định tuyến mới (có thể có bộ chọn bổ sung) tham chiếu quy tắc đó ở giá trị tùy chọn sau, nhưng bỏ qua quy tắc đó trước với đi đến quy tắc
... chỉ vào quy tắc thông thường để tra cứu chủ yếu, do đó, thậm chí không có trường hợp bảng định tuyến cũ ảnh hưởng đến một số gói và trường hợp định tuyến mới hơn sẽ ảnh hưởng đồng thời đến các gói khác trước khi quá trình chuyển đổi kết thúc. Điều này được cho là không thực sự quan trọng và đi đến
các quy tắc dưới đây có thể được bỏ qua nếu tính nguyên tử nghiêm ngặt như vậy là không cần thiết.
quy tắc ip thêm pref 20001 goto 32766
quy tắc ip thêm pref 20002 tra cứu 1001
tự động chuyển sang bảng định tuyến mới hơn với một khác đi đến quy tắc có tùy chọn trước đó sẽ bỏ qua cả quy tắc dành cho bảng định tuyến cũ hơn và quy tắc đã bỏ qua bảng định tuyến mới hơn.
quy tắc ip thêm pref 19999 goto 20002
dọn dẹp
quy tắc ip del pref 20000
quy tắc ip del pref 20001
quy tắc ip del pref 19999
quay lại trạng thái trước đó: sử dụng lại ID bảng định tuyến trước đó và các giá trị tùy chọn quy tắc định tuyến
làm lại trên bảng định tuyến 1000 các thao tác tương tự đã thực hiện trước đó trên bảng định tuyến 1001 ở bước 2., bắt đầu bằng cách xóa nó
bảng xóa lộ trình ip 1000
tuyến ip thêm ... bảng 1000
...
đặt lại tùy chọn và tham chiếu đến trạng thái trước đó và dọn dẹp
quy tắc ip thêm pref 20000 tra cứu 1000
quy tắc ip del pref 20002
ip tuôn ra bảng 1001
Hoặc chuyển đổi vai trò của các bảng 1000 và 1001 trong lần lặp lại tiếp theo có thể sẽ tránh phải điền các tuyến hai lần.
Trạng thái bây giờ trở lại bước 1.
Nếu mục tiêu là thay thế chủ yếu bảng định tuyến, chỉ cần coi đó là bảng ID 254 (và đó là bảng duy nhất (dọc theo địa phương bảng định tuyến) để nhận các tuyến kernel tự động: tốt hơn là luôn sử dụng không có tiền tố
đến địa chỉ và thêm tuyến đường bởi trình nền trong trường hợp này): không có nhiều thay đổi trong thuật toán ở trên ngoại trừ có thể thay thế chọn 32766
với chọn 32767
hoặc một sự thay đổi tương tự. Ngoài ra, bất kỳ tuyến mới nào được thêm vào bảng định tuyến (ngay cả khi không được tham chiếu) đều yêu cầu xác thực với chính nó hoặc các tuyến đã có trong bảng này hoặc các quy tắc đang hoạt động hiện tại và các tuyến của bảng được tham chiếu.