Để tóm tắt bối cảnh, đó là một bộ chứa lxd luôn kết nối dưới dạng ứng dụng khách OpenVpn.
{wan} <-> {192.168.x.x <-> iptables <-> máy chủ cầu lxd 10.0.3.1} <-> {lxd vùng chứa 10.0.3.3 | openvpn <-> iptables}
Trong thùng chứa có
- eth0 (ip 10.0.3.3) là giao diện máy khách trên cầu lxd
- tun0 kết nối dưới dạng máy khách với máy chủ OpenVpn
Máy chủ lưu trữ lxd (10.0.3.1) chuyển tiếp lưu lượng truy cập 10.0.3.3 sang mạng bên ngoài, iptables luôn chấp nhận các kết nối gửi đi.
Máy chủ và máy khách lxd đều có iptables.
Tôi đã thực hiện định tuyến trên 10.0.3.3 nhưng đối với cổng đến (ví dụ: cổng http đến 10.0.3.3 và phản hồi trên eth0, không phải tun0).
Vì vậy, tôi có một bảng định tuyến "novpn" với số fwmark.
Vấn đề của tôi bây giờ là tôi đang cố gắng làm điều ngược lại. Các yêu cầu gửi đi đến cổng 21 trên bất kỳ máy chủ từ xa nào đều phải đi qua eth0 (bảng "novpn").
Tôi đã theo dõi một số bài đăng trên stackoverflow và tích hợp bài đăng này vào iptables của ứng dụng khách 10.0.3.3. Tôi cảm thấy như nó chỉ là:
quy tắc ip thêm bảng fwmark 66 novpn
tuyến ip thêm mặc định qua bảng 10.0.3.1 dev eth0 novpn
iptables -t mangle -A PREROUTING -p tcp --dport 21 -j MARK --set-mark 66
iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 66
Trên iptables của 10.0.3.1, tôi có một quy tắc chấp nhận chuyển tiếp từ các kết nối đã được thiết lập và đã biết. Vì vậy, cầu nên tuân theo và tôi không nghĩ bất kỳ quy tắc nào khác là cần thiết?
Nhưng nó không hoạt động, khi tôi nhìn vào tcpdump trên máy chủ (10.0.3.1) tôi thấy rằng các gói được gửi bằng IP openvpn chứ không phải 10.0.3.3. Dường như cũng có vấn đề với tổng kiểm tra của các gói đã gửi -> cksum 0x1983 (không chính xác -> 0xe8ec).
Thật kỳ lạ, khi tôi thực hiện tcpdump trên bảng điều khiển của máy khách lxd (10.0.3.3), tcpdump không hiển thị bất kỳ thứ gì và ở đó tôi không còn hiểu gì nữa.
Tôi tự hỏi liệu lxd có được ưu tiên hơn (có thể là thứ gì đó giống như thiết bị proxy, v.v.) hơn iptables (và tcpdump??), nhưng điều đó có vẻ rất lạ đối với tôi.
Nếu nó có thể hữu ích, tôi có một quy tắc "quy tắc ip thêm vào bảng xxx.xxx.xxx.xxx novpn". Vì vậy, bất kỳ kết nối nào với ip này đều đi qua eth0 và, đây thực sự là trường hợp, có yêu cầu chính xác trong tcpdump.
Ai có thể giúp tôi.