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.