Điểm:1

Gán IP công cộng cho máy khách OpenVPN. iptables, route hoặc cái gì để sử dụng cho điều đó?

lá cờ jp

Tôi có một máy chủ với Pi-Hole được định cấu hình để chặn Quảng cáo và trình theo dõi. Các máy khách được kết nối qua OpenVPN và nhận địa chỉ từ 10.8.0.0/24. OpenVPN chỉ đẩy DNS tới máy khách và lưu lượng được định tuyến qua cổng cục bộ nhưng tất nhiên, mọi máy khách trên VPN đều có thể liên hệ với mọi máy khách khác qua địa chỉ 10.8.0.x của chúng.

Tôi đã đặt hàng một chiếc ipv4 thứ hai mà tôi muốn sử dụng riêng cho máy khách 10.8.0.4.Tôi muốn có thể truy cập ip công khai và hiển thị ứng dụng khách đó trực tiếp với internet để sử dụng Nextcloud được lưu trữ cục bộ.

Tôi đã tìm kiếm Lỗi máy chủ và tìm thấy một số vấn đề tương tự. Tôi đã cố gắng thêm các quy tắc POSTROUTING và PREROUTING vào iptables nhưng không thành công. Ipv4 hiện được thêm tạm thời vào eth0 thông qua 'ip addr add xx.xx.xx.xx. dev eth0', không phải tun0 (có đúng không?). Máy chủ OpenVPN được định cấu hình chính xác như được đề cập trong tài liệu Pi-Hole (https://docs.pi-hole.net/guides/vpn/openvpn/only-dns-via-vpn/). net.ipv4.ip_forward đã được bật.

Tôi thậm chí có phải sử dụng iptables không? Có thể hoặc nên thêm ip công cộng vào một tuyến đường hay cái gì đó không? Xin lỗi nếu câu hỏi nghe có vẻ ngớ ngẩn. Tôi còn khá mới với cấu hình OpenVPN và Route/iptables.

Đó là điều đầu tiên tôi đã thử: Chuyển hướng tất cả lưu lượng truy cập đến từ IP công cộng phụ sang địa chỉ IP nội bộ bằng iptables

Quy tắc iptables hiện tại của tôi là:

# Được tạo bởi xtables-save v1.8.2 vào Thu ngày 12 tháng 12 14:37:26 2019
* tự nhiên
: CHẤP NHẬN TRƯỚC [329:28209]
:CHẤP NHẬN ĐẦU VÀO [281:25114]
:CHẤP NHẬN SAU ĐÓ [17:1423]
:CHẤP NHẬN ĐẦU RA [245:22126]
-A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source xx.xx.xx.xx
-A POSTROUTING -o eth0 -j MASQUERADE
LÀM
# Hoàn thành ngày Thu 12/12 14:37:26 2019
# Được tạo bởi xtables-save v1.8.2 vào Thu ngày 12 tháng 12 14:37:26 2019
*lọc
:INPUT DROP [0:0]
:CHẤP NHẬN VỀ PHÍA TRƯỚC [0:0]
:CHẤP NHẬN ĐẦU RA [0:0]
-A INPUT -i lo -j CHẤP NHẬN
-A INPUT -m state --state LIÊN QUAN, THÀNH LẬP -j CHẤP NHẬN
-A INPUT -i tun0 -j CHẤP NHẬN
-A INPUT -i tun0 -p tcp -m tcp --dport 53 -j CHẤP NHẬN
-A INPUT -i tun0 -p udp -m udp --dport 53 -j CHẤP NHẬN
-A INPUT -i tun0 -p tcp -m tcp --dport 80 -j CHẤP NHẬN
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j CHẤP NHẬN
-A INPUT -i tun0 -p tcp -m tcp --dport 443 -j CHẤP NHẬN
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j CHẤP NHẬN
-A INPUT -p tcp -m tcp --dport 2202 -j CHẤP NHẬN
-A INPUT -p tcp -m tcp --dport 1194 -j CHẤP NHẬN
-A INPUT -p udp -m udp --dport 1194 -j CHẤP NHẬN
-A INPUT -p udp -m udp --dport 80 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p udp -m udp --dport 443 -j REJECT --reject-with icmp-port-unreachable
LÀM
# Hoàn thành ngày Thu 12/12 14:37:26 2019

Quy tắc NAT của iptables:

PREROUTING chuỗi (CHẤP NHẬN chính sách)
đích prot opt ​​nguồn đích

ĐẦU VÀO chuỗi (chính sách CHẤP NHẬN)
đích prot opt ​​nguồn đích

Chuỗi POSTROUTING (CHẤP NHẬN chính sách)
đích prot opt ​​nguồn đích
SNAT tất cả -- 10.8.0.0/24 !10.8.0.0/24 tới:xx.xx.xx.xx
MASQUERADE tất cả -- mọi nơi mọi nơi

ĐẦU RA chuỗi (chính sách CHẤP NHẬN)
đích prot opt ​​nguồn đích

Sau nhận xét từ NiKiZe, tôi đã tạm thời thêm địa chỉ ip công cộng qua

địa chỉ ip thêm xx.xx.xx.xx dev eth0

và nhập cả hai quy tắc (để làm rõ rằng: tôi đã xuất bộ quy tắc đang hoạt động qua iptables-save, chỉnh sửa cả hai lệnh trong và khôi phục nó qua iptables-restore)

-A PREROUTING -d xx.xx.xx.xx -j DNAT --to-destination 10.8.0.4
-A POSTROUTING -s 10.8.0.4 ! -d 10.8.0.4 -j SNAT --to-source xx.xx.xx.xx

Sau đó, tôi đã mở một số phiên cuối và theo dõi lưu lượng truy cập web bằng tcpdump tại máy chủ OpenVPN và máy chủ cục bộ của mình, xác nhận rằng lưu lượng truy cập đến tại eth0 đến pi.hole.http được định tuyến chính xác đến máy chủ cục bộ của tôi server.vpn.http. Nhưng câu trả lời đã hết...

quy tắc nat hiện tại của tôi là:

user@dns:~# iptables -t nat -vL --line-numbers
Chuỗi PREROUTING (chính sách CHẤP NHẬN 1 gói, 52 byte)
num pkts byte target prot opt ​​in out đích nguồn
1 0 0 DNAT all -- any anywhere pi.hole to:10.8.0.4

Chuỗi INPUT (chính sách CHẤP NHẬN 0 gói, 0 byte)
num pkts byte target prot opt ​​in out đích nguồn

Chuỗi POSTROUTING (chính sách CHẤP NHẬN 1 gói, 60 byte)
num pkts byte target prot opt ​​in out đích nguồn
1 0 0 SNAT all -- bất kỳ server.vpn nào !server.vpn to:xx.xx.xx.xx <- địa chỉ ip được thêm tạm thời
2 0 0 SNAT all -- any any 10.8.0.0/24 !10.8.0.0/24 to:xx.xx.xx.xx <- địa chỉ ip chính, được nhập tĩnh
3 0 0 MASQUERADE tất cả -- mọi eth0 ở mọi nơi mọi nơi

ĐẦU RA chuỗi (chính sách CHẤP NHẬN 1 gói, 60 byte)
num pkts byte target prot opt ​​in out đích nguồn

Một chỉnh sửa khác: Khi tôi thêm 'src server.vpn' vào tcpdump, tôi có thể thấy rằng không có lưu lượng truy cập ra ngoài từ máy chủ cục bộ. Vì vậy, phải có vấn đề với cấu hình máy chủ cục bộ hoặc quy tắc định tuyến sau. Tôi có đúng không?

Sau khi thay đổi tuyến đường trên server.vpn, kết nối đang hoạt động. 'tuyến đường -n' Trước:

Bảng định tuyến IP hạt nhân
Cổng đích Genmask Flag Metric Ref Sử dụng Iface
0.0.0.0 192.168.178.1 0.0.0.0 UG 0 0 0 eth0
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth3
169.254.160.0 169.254.160.1 255.255.248.0 UG 0 0 0 tun1000
169.254.160.0 0.0.0.0 255.255.248.0 U 0 0 0 tun1000
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.178.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

Và sau:

Bảng định tuyến IP hạt nhân
Cổng đích Genmask Flag Metric Ref Sử dụng Iface
0.0.0.0 10.8.0.1 0.0.0.0 UG 0 0 0 điều chỉnh0
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth3
169.254.160.0 169.254.160.1 255.255.248.0 UG 0 0 0 tun1000
169.254.160.0 0.0.0.0 255.255.248.0 U 0 0 0 tun1000
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.178.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

Nếu tôi hiểu điều này một cách chính xác, điều đó có nghĩa là MỌI kết nối mạng, thậm chí được khởi tạo bởi server.vpn đều được định tuyến qua VPN. Đây không phải là hành vi dự kiến. Tôi chỉ đơn giản muốn máy chủ có thể truy cập cục bộ và sử dụng internet thông thường, được định tuyến cục bộ, đồng thời trả lời các kết nối được định tuyến từ ip công khai trên Máy chủ OpenVPN.

lá cờ in
IP công cộng cần được thêm vào cùng một giao diện với vị trí của cổng cho địa chỉ đó, vì vậy rất có thể giao diện internet/eth0 của bạn (giải pháp thay thế là lấy một dải được định tuyến qua IP công cộng của bạn) "Điều đầu tiên tôi đã thử" là những gì bạn sẽ cần làm, nhưng có thể còn nhiều vấn đề khác đang xảy ra. tcpdump là một công cụ tuyệt vời để theo dõi lưu lượng truy cập và cố gắng hiểu luồng. bộ đếm trong iptables là một công cụ khác thường bị bỏ qua để chẩn đoán sự cố.
Thomson avatar
lá cờ jp
Cảm ơn bạn đã gợi ý. Tôi đã kiểm tra giao diện tun0 tại máy chủ cục bộ và máy chủ OpenVPN. Sau khi thêm các quy tắc định tuyến trước và sau, tôi có thể thấy qua tcpdump lưu lượng truy cập đến máy chủ cục bộ nhưng không có câu trả lời nào được trả về. Nó hết thời gian. Điều đó có nghĩa là quy tắc postrouting của tôi là sai?
lá cờ in
Bạn sẽ cần phải có lưu lượng truy cập cả hai chiều. sử dụng tcpdump để kiểm tra xem lưu lượng truy cập đến từ đâu và xác minh rằng bạn có tuyến đường đưa lưu lượng truy cập đó trở lại.
Thomson avatar
lá cờ jp
Tôi nghĩ rằng tôi đã tuân theo quy tắc POSTROUTING trên máy chủ OpenVPN. Nhưng rõ ràng server.vpn không gửi câu trả lời cho phản hồi http.Tôi đã kiểm tra lại với tcpdump và nhận thấy rằng phản hồi đến từ máy chủ OpenVPN trên tun0 được trả lời trên eth0 và do đó bị người nhận bỏ qua. Tôi có phải thêm quy tắc định tuyến tĩnh vào server.vpn không? iptables có sẵn ở đó nhưng quy tắc nào là cần thiết ở đó? Làm cách nào để đảm bảo rằng lưu lượng truy cập đến từ tun0 được trả lời mà không thay đổi cổng mặc định?
lá cờ in
Có, điều này có thể kết thúc với thiết lập "multi homed", có nghĩa là cách phổ biến để giải quyết vấn đề này là sử dụng `ip rule` và `ip route` cũ. https://serverfault.com/a/736047/187998 (bạn không phải tạo tên cho các bảng mà thay vào đó chỉ cần sử dụng số)
Thomson avatar
lá cờ jp
Cảm ơn sự giúp đỡ của bạn! Tôi đã quản lý để làm cho nó hoạt động bằng cách đặt máy chủ OpenVPN làm cổng nhưng hiện tại tôi không gặp may trong việc thiết lập thiết lập "đa nhà". Tôi hiện đang đọc thêm về cấu hình của OpenVPN, iptables và định tuyến nói chung. Tôi hy vọng sẽ làm việc đó.

Đă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.