Để giải quyết vấn đề này, bạn sẽ cần thiết lập cả iptables và quy tắc định tuyến. Vấn đề cụ thể mà bạn gặp phải là các gói SSH gửi đi đang được định tuyến qua giao diện đường hầm VPN ẩn danh thay vì giao diện Ethernet của bạn. Điều này xảy ra vì phần mềm VPN của bạn thiết lập quy tắc định tuyến để gửi bất kỳ và tất cả lưu lượng chưa được xử lý thông qua giao diện đường hầm. Tốt để ẩn danh lưu lượng truy cập mạng của bạn; xấu khi thiết lập kết nối SSH với máy tính của bạn.
Có một vài cách để khắc phục vấn đề này, nhưng tôi sẽ chia sẻ với bạn cách khắc phục sự cố trong tình huống giống hệt tôi. Đây là những gì chúng ta cần làm:
- Tạo bảng quy tắc IP mới để xử lý lưu lượng không phải VPN
- Thêm quy tắc IP để tra cứu bảng không có VPN của chúng tôi cho bất kỳ gói tin nào được đánh dấu bằng mặt nạ bộ lọc mạng cụ thể
- Thêm tuyến IP chỉ đạo tất cả lưu lượng truy cập trong bảng không có VPN của chúng tôi để sử dụng giao diện Ethernet của bạn thay vì đường hầm
- Thêm quy tắc iptables để đánh dấu tất cả lưu lượng SSH bằng mặt nạ bộ lọc mạng được chỉ định của chúng tôi
Lưu ý: Tôi đã làm việc với Raspbian trong khi thực hiện các thao tác sau, vì vậy bạn có thể cần điều chỉnh các lệnh một chút để phù hợp với bản phân phối của mình.
Tạo bảng quy tắc IP mới
Bắt đầu bằng cách kiểm tra tệp định nghĩa bảng của iproute2. Chúng tôi muốn đảm bảo rằng chúng tôi không sử dụng tên hoặc số của bất kỳ bảng quy tắc hiện có nào.
cat /etc/iproute2/rt_tables
Bạn có thể sẽ thấy một cái gì đó dọc theo những dòng này:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Chọn một số và tên tùy ý cho bảng quy tắc mới của bạn - bất cứ điều gì không được sử dụng ở trên. Tôi sẽ sử dụng số 201 và tên novpn
cho phần còn lại của câu trả lời này.
Nối một định nghĩa trực tiếp vào tệp định nghĩa hoặc chỉnh sửa nó trong trình soạn thảo văn bản bạn chọn:
echo "201 novpn" >> /etc/iproute2/rt_tables
Thêm quy tắc IP mới để tra cứu bảng không có VPN
Kiểm tra mọi quy tắc ip hiện có liên quan đến mặt nạ netfilter:
ip rule show | grep fwmark
Nếu grep không có gì, bạn rõ ràng. Nếu nó in một số dòng, hãy lưu ý số thập lục phân ở bên phải của từ fwmark
trong mỗi dòng. Bạn sẽ cần chọn một số hiện không được sử dụng. Vì tôi không có quy tắc fwmark hiện có, tôi đã chọn số 65.
ip rule add fwmark 65 table novpn
Điều này không gây ra bất kỳ gói tin nào có mặt nạ netfilter 65 để tra cứu novpn
bảng mới của chúng tôi để được hướng dẫn cách định tuyến các gói.
Chỉ đạo tất cả lưu lượng truy cập trong bảng mới của chúng tôi để sử dụng giao diện Ethernet
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
Điều quan trọng cần lưu ý ở đây là dev eth0
. Điều này buộc tất cả lưu lượng đi qua novpn
bảng chỉ sử dụng giao diện Ethernet phần cứng, thay vì giao diện đường hầm ảo mà VPN của bạn tạo.
Bây giờ sẽ là thời điểm tốt để xóa bộ nhớ cache iproute của bạn, để đảm bảo các quy tắc và tuyến mới của bạn có hiệu lực ngay lập tức:
ip route flush cache
Hướng dẫn quy tắc tường lửa để đánh dấu tất cả lưu lượng SSH bằng mặt nạ bộ lọc mạng được chỉ định
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Có quá nhiều lựa chọn ở đây để tôi giải thích ở bất kỳ chiều sâu tuyệt vời nào. Tôi đặc biệt khuyến khích bạn đọc trang hướng dẫn cho iptables để hiểu được những gì đang diễn ra ở đây:
man iptables
Tóm lại: chúng tôi đang nối thêm quy tắc đầu ra vào bảng mangle của tường lửa (để xử lý gói chuyên dụng) hướng dẫn nó đánh dấu bất kỳ gói TCP nào có nguồn gốc từ cổng nguồn 22 bằng mặt nạ bộ lọc mạng được chỉ định 65 của chúng tôi.
Tiếp theo là gì?
Tại thời điểm này, bạn nên sẵn sàng thử nghiệm SSH. Nếu mọi việc suôn sẻ, bạn sẽ được đáp ứng với lời nhắc "đăng nhập như" hạnh phúc.
Để bảo mật, tôi khuyên bạn nên hướng dẫn tường lửa của mình bỏ mọi yêu cầu SSH đến từ giao diện đường hầm:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Lưu ý rằng tất cả các hướng dẫn ở trên là nhất thời (ngoại trừ việc tạo ID bảng quy tắc) - chúng sẽ xóa trong lần tiếp theo bạn khởi động lại máy tính. Làm cho chúng vĩnh viễn là một bài tập tôi để lại cho bạn.