How to setup NAT on Proxmox
Proxmox mặc định sử dụng bridge network để cung cấp internet cho VM, nhưng trong chế độ bridge bạn cần có IP pubic cho các VM để thông được mạng, nếu bạn có ít IP public hoặc muốn triển khai proxmox theo dạng private có thể sử dụng NAT để VM truy cập mạng thông qua IP public của proxmox.
Để thực hiện NAT trên proxmox bạn có thể làm như sau
Chuẩn bị:
Cài gói card mạng:
apt install ifupdown2
Bước 1: Điều chỉnh lại card mạng public:
auto lo
iface lo inet loopback
auto eno1
#real IP address
iface eno1 inet static
address 198.51.100.5
netmask 255.255.255.0
gateway 198.51.100.1
auto vmbr0
#private sub network
iface vmbr0 inet static
address 10.10.10.1
netmask 255.255.255.0
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
Trong mục trên eno1 là card mạng vật lý chứa IP public của proxmox
card bridge vmbr0 là card ảo được đặt IP: 10.10.10.1 làm gateway của dải IP local 10.10.10.0/24 sẽ cấp cho các máy ảo
bridge_ports none: card vmbr0 không kết nối ra bên ngoài trực tiếp
sau khi xong bạn save lại file config: mặc định cổng mạng vmbr0 sẽ tự up,
Bước 2: Cấu hình Ip cho VM
VM có thể đặt IP như sau:
IP : 10.10.10.2
Gateway : 10.10.10.1
Netmask : 255.255.255.0
Step 4 : (Optional) Port forwarding to access from outside world
Cấu hình Port forwarding truy cập từ ngoài vào VM, ờ đây mình giả sử tạo forwarding port ssh 22
chạy trên host proxmox nat port 3033 từ proxmox vào port ssh 22 của vm
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 3033 -j DNAT --to 10.10.10.2:22
sau khi xong bạn có thể ssh từ ngoài vào vm vớ i IP proxmox, port ssh 3033
để khi khỏi động không bị mất bạn có thể chèn vào file /etc/rc.local
Ngoài ra bạn cũng có thể chèn trực tiếp trong file khai báo của vmb0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 6022 -j DNAT --to 10.10.10.5:22
post-down iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 6022 -j DNAT --to 10.10.10.5:22
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 6122 -j DNAT --to 10.10.10.6:22
post-down iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 6122 -j DNAT --to 10.10.10.6:22