Tôi có một máy chủ do hetzner lưu trữ với một địa chỉ IP công khai chạy proxmox và một số máy ảo. Địa chỉ IP này được cấu hình bên trong /etc/interfaces như sau:
tự động enp35s0
iface enp35s0 inet tĩnh
địa chỉ {{my-public-ip}}/{{mạng con}}
cổng {{hetzner-gateway}}
up route add -net {{hetzner-ip}} netmask 255.255.255.192 gw {{hetzner-gateway}} dev enp35s0
Cấu hình này được thực hiện bởi hetzner.
Vì tôi không muốn nhận thêm địa chỉ ip từ hetzner nên tôi đã giả mạo ip đó cho Mạng VM nội bộ:
tự động vmbr0
iface vmbr0 inet tĩnh
địa chỉ 172.16.0.1/24
cổng cầu không có
tắt cầu nối
cầu-fd 0
hậu kỳ echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '172.16.0.0/24' -o enp35s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '172.16.0.0/24' -o enp35s0 -j MASQUERADE
Với điều này, các máy ảo của tôi có quyền truy cập internet và có thể kết nối với nhau.
Vì việc chuyển tiếp cổng iptables hơi phức tạp đối với tôi nên tôi đã bắt đầu sử dụng tường lửa. Trong đó, giao diện enp35s0 của tôi được gán cho vùng bên ngoài và vmbr0 được tin cậy. Tôi biết có lẽ tôi nên gán nó cho nội bộ thay thế nhưng hiện tại nó không thực sự tạo ra sự khác biệt (hoặc tôi nghĩ vậy trong trường hợp sự cố của mình).
Tôi hiện có một dịch vụ chạy bên trong máy ảo với ip 172.16.0.3 trên cổng 38080. Để tiếp cận dịch vụ này, tôi thêm quy tắc chuyển tiếp cổng trong tường lửa: port=38080:proto=tcp:toport=38080:toaddr=172.16.0.3
. Với điều đó, tôi có thể tiếp cận dịch vụ đó từ bên ngoài máy chủ này.
Vấn đề bây giờ là, nếu tôi sử dụng một phần mềm như uptime-kuma và chạy nó bên trong VM trên cùng một máy vật lý, tôi không thể truy cập dịch vụ đó trên cổng 38080 vì chuyển tiếp cổng chỉ được thực hiện cho các yêu cầu bên ngoài. Điều quan trọng ở đây là tên máy chủ mà uptime-kuma sử dụng là FQDN được phân giải thành địa chỉ ip công khai của máy chủ của tôi.
Vì vậy, để thực hiện điều này, tôi thêm cùng một quy tắc chuyển tiếp cổng vào vùng tin cậy của tường lửa vì giao diện vmbr0 của tôi ở trong đó và từ giao diện đó xuất hiện yêu cầu.
Bây giờ kết nối này hoạt động và phần mềm của tôi (thời gian hoạt động-kuma) có thể tiếp cận dịch vụ của tôi.
Vấn đề lớn hiện nay là MỌI yêu cầu từ bên trong Mạng ảo muốn sử dụng cổng 38080 đều được chuyển hướng đến máy ảo đó (172.16.0.3), ngay cả những yêu cầu chuyển đến một máy chủ hoàn toàn khác.
Làm cách nào tôi có thể yêu cầu tường lửa chỉ chuyển hướng lưu lượng truy cập đó nếu yêu cầu thực sự được nhắm mục tiêu vào máy chủ?