Điểm:2

Trong Linux làm cách nào để thêm tuyến vào tiền tố thông qua một thiết bị cụ thể với các đích nhất định trong tiền tố đó đi qua tuyến mặc định?

lá cờ ke

Tôi hiện đang xử lý một VPN có điểm cuối kết nối nằm trong mạng con mà tiền tố sẽ được tạo đường hầm thông qua VPN cụ thể đó.

Do đó, về cơ bản, vấn đề sẽ được giải quyết để khớp với một tập hợp địa chỉ đích (lớn hơn) (mặt nạ/16), ngoại trừ một tập hợp con (nhỏ) được chứa hoàn toàn của các đích cụ thể sẽ không được định tuyến theo cách đó (và thay vào đó đi qua tuyến đường mặc định) .

Nếu vấn đề là về lọc, thì trong Linux, việc sử dụng này có thể được triển khai bằng cách sử dụng ipset thiết lập như

ipset tạo hàm băm MyVPN:net
ipset thêm MyVPN $MYVPNNET/$MYVPNMASK
ipset thêm MyVPN $MYVPNENDPOINT không khớp

Tuy nhiên, các ipset như vậy chỉ có thể được sử dụng bên trong bộ lọc mạng.

Bây giờ câu hỏi của tôi là, làm thế nào tôi có thể thiết lập một cái gì đó tương đương bằng cách sử dụng Định tuyến IP nâng cao của Linux, tức là lộ trình ip gia đình của các lệnh?

djdomi avatar
lá cờ za
Các câu hỏi tìm kiếm trợ giúp về cài đặt, cấu hình hoặc chẩn đoán phải bao gồm trạng thái kết thúc mong muốn, sự cố hoặc lỗi cụ thể, thông tin đầy đủ về cấu hình và môi trường để tái tạo nó cũng như các giải pháp đã thử. Các câu hỏi không có tuyên bố vấn đề rõ ràng sẽ không hữu ích cho những người đọc khác và không có khả năng nhận được câu trả lời hay.
datenwolf avatar
lá cờ ke
@djdomi: Đây không phải là tìm kiếm trợ giúp cho một cấu hình cụ thể. Tôi đang tìm cách xác định tuyến đường (theo cách tổng quát) bằng cách xóa các tập hợp con nhất định khỏi quy tắc bảng tuyến đường. Đây là một cái gì đó có thể được áp dụng cho tất cả các loại tình huống.
Điểm:2
lá cờ ke

Hóa ra, trong Linux, người ta có thể sử dụng ipset phù hợp để chọn bảng định tuyến. Thành phần bổ sung đang sử dụng quy tắc bộ lọc mạng sẽ khớp với các gói gửi đi và áp dụng một fwmark cho họ, mà sau đó có thể được sử dụng để chọn một bảng định tuyến chuyên dụng. Sau đó, bảng định tuyến chuyên dụng này sẽ chỉ chứa một tuyến đường mặc định duy nhất thông qua VPN.

Đây là ý tưởng chung dưới dạng kịch bản, cách thiết lập điều này.

# Mạng con để định tuyến qua TUN

DSTNETS=.../...../..

# Loại trừ các đích này khỏi định tuyến qua TUN

LOẠI TRỪ=... ...

# TUN thiết bị để sử dụng cho kết nối này và các tham số của nó. Những thiết bị này thường được cung cấp bởi daemon VPN

TUNDEV=...
TUNADDR=.../..
TUNPEER =...

# Tên cho ipset được sử dụng để khớp với đích. Dựa trên tên TUN

IPSET=${TUNDEV}ipset

# Chúng tôi cần một fwmark bộ lọc mạng và một bảng iproute2. fwmark và bảng là các giá trị 32 bit, giới hạn trong phạm vi số nguyên đã ký, tức là [0, 2³¹-1] fwmark có thể được sử dụng làm mặt nạ bit báo hiệu nhiều cờ, do đó, tùy thuộc vào nhu cầu của chúng tôi, hãy đặt một (hoặc một vài bit) cụ thể, hoặc một giá trị rất cụ thể mà sau đó được so sánh cho bình đẳng.

FWMARK=0x...
BẢNG=0x...

# Tạo ipset và điền vào đó các dải địa chỉ IP và mạng con để khớp và không khớp.

ipset tạo hàm băm $IPSET:net
cho d trong $DSTNETS ; làm ipset thêm $IPSET $d ; xong
cho x trong $EXCLUDE ; làm ipset thêm $IPSET $x nomatch ; xong

# Tạo một bảng quy tắc iproute2 mới sẽ được sử dụng để tra cứu tuyến đường cho tất cả các gói được đặt dấu lựa chọn của chúng tôi

quy tắc ip thêm bảng fwmark $FWMARK $TABLE

# Đây là nơi điều kỳ diệu xảy ra: Tạo một quy tắc bộ lọc mạng sẽ khớp các gói bắt nguồn từ máy chủ này, cho các đích khớp với ipset mà chúng ta vừa tạo và đánh dấu chúng bằng fwmark đã chọn. Do quy tắc mà chúng tôi vừa tạo trước đó, các gói đó sau đó sẽ được định tuyến bằng cách sử dụng bảng cụ thể đó, thay vì các bảng chung.

iptables -t mangle -A OUTPUT -m set --match-set $IPSET dst -j MARK --set-mark $FWMARK

# Ngoài ra, hãy thêm quy tắc bộ lọc mạng để ghi đè địa chỉ nguồn cho các gói này vì mạng đích có thể sẽ từ chối chúng nếu chúng không khớp với dải địa chỉ được sử dụng cho VPN

iptables -t nat -A POSTROUTING -m set --match-set $IPSET dst -j SNAT --to-source $INTERNAL_IP4_ADDRESS

# Bây giờ chúng ta có thể thiết lập thiết bị TUN thực tế.Nói một cách chính xác, các bước đó có thể đã được thực hiện trước đó, nhưng sau đó trong một thời gian ngắn giữa TUN xuất hiện và thiết lập các quy tắc định tuyến, một số gói có thể đã kết thúc trong tình trạng lấp lửng

thiết lập liên kết ip dev $TUNDEV lên
ip addr add $TUNADDR ngang hàng $TUNPEER dev $TUNDEV 

# Cuối cùng, thiết lập một tuyến đường mặc định đi qua TUN trong bảng định tuyến chuyên dụng của chúng tôi, do quy tắc fwmark sẽ chỉ bị tấn công bởi các gói phù hợp với ipset của chúng tôi

tuyến ip thêm bảng dev mặc định $TUNDEV $TABLE

Để phá bỏ mọi thứ, chỉ cần làm theo kịch bản ngược lại, xóa nội dung; các ipset có thể hủy hoạied với một lệnh duy nhất.

Điểm:2
lá cờ cn

Các tuyến đường được tính toán theo cách tiếp cận cụ thể nhất trước tiên. Vì vậy, nếu mạng con nhỏ của bạn cần tuyến mặc định, hãy đặt tuyến đó trước rồi thêm các tuyến khác:

Cổng mặc định trong ví dụ này là 10.0.0.1 VPN là 10.0.0.2

tuyến ip thêm 10.0.1.0/24 qua 10.0.0.1
tuyến ip thêm 10.2.0.0/16 qua 10.0.0.2
tuyến ip thêm mặc định qua 10.0.0.1

Sẽ định tuyến lưu lượng truy cập đến mạng con (10.0.1.0) qua cổng mặc định, VPN qua 10.0.0.2 và lưu lượng truy cập mặc định khác qua cổng mặc định.

datenwolf avatar
lá cờ ke
Vâng, đây là cách mà hầu hết các tập lệnh VPN đang thực hiện. Nhưng có một vấn đề: Bằng cách thêm một tuyến đường hẹp qua một cổng cụ thể, thiết lập như vậy không thể xử lý liền mạch các thay đổi của tuyến đường mặc định. Ví dụ: khi chuyển mạng trong tình huống chuyển vùng hoặc thậm chí có thể đơn giản như cắm máy tính xách tay của bạn (chuyển từ mạng W-LAN sang mạng LAN có dây). Điều này không cần thiết làm phức tạp hóa mọi thứ, vì nếu được thực hiện như bạn đã đề xuất, sẽ phải theo dõi liên tục trạng thái mạng, phát hiện xem các tuyến cụ thể có phải bị thay đổi hay không và các bảng định tuyến được điều chỉnh.
datenwolf avatar
lá cờ ke
Những gì tôi đang tìm kiếm tương đương với *ipset* `nomatch` để tránh tất cả những rắc rối đó.
lá cờ cn
À, được rồi - tôi hiểu rồi! Tôi sẽ để lại câu trả lời để giữ lại các bình luận, vì chúng là những lời giải thích quan trọng.
djdomi avatar
lá cờ za
@ shearn89 nhắc nhở nếu nó giải quyết được vấn đề của bạn, bạn cần phải chấp nhận nó, nếu không chúng ta sẽ được nhớ đến cho đến cuối bất kỳ thập kỷ nào...
lá cờ cn
@djdomi Tôi không phải OP...
djdomi avatar
lá cờ za
yupp không cuộn đủ ở trên. @datawolf bạn có ý với nhận xét của tôi
datenwolf avatar
lá cờ ke
@djdomi: Xem câu trả lời tôi đã viết, liên quan đến phương pháp tôi đã tìm ra. Tôi sẽ biến câu trả lời đó thành câu trả lời được chấp nhận sau khi thời gian gia hạn trôi qua.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.