kvm虛擬機配置NAT端口轉發

1. 概述

在內網一臺物理機部署了kvm虛擬化環境。爲了避免虛擬機的IP地址和內網網段衝突,kvm採用的是NAT模式,而非橋接模式。因此在本地訪問kvm虛擬機時,必須用物理機來實現轉發,才能登錄到虛擬機。而kvm的轉發,需要使用Linux的iptables工具來實現

2. iptables創建規則

先創建虛擬機,比如創建一臺虛擬機node98,其ip地址是192.168.80.98,我想在本地訪問node98的22端口,是無法實現的。所以需要進行以下操作:

iptables -t nat -A PREROUTING -p tcp --destination 192.168.212.93 --dport 2298 -j DNAT --to-destination 192.168.80.98:22
iptables -t nat -A POSTROUTING -p tcp --dport 22 -d 192.168.80.98 -j SNAT --to 192.168.212.93
iptables -D FORWARD 5 -t filter
iptables -D FORWARD 4 -t filter

上述使用iptables配置了物理機192.168.212.93到其內部kvm虛擬機node98的22端口轉發。需要注意的是:

iptables -D FORWARD 5 -t filter
iptables -D FORWARD 4 -t filter

這兩條需要操作,否則轉發不成功,登錄失敗

3. 查看和清除

物理機創建的虛擬機多了,端口轉發規則多了起來。使用以下命令查看當前的轉發規則

iptables -nL -v --line-numbers -t nat

會在Chain PREROUTING Chain POSTROUTING 看到對應的條目。

清除當前規則:

iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING

4. 一些別的問題

  1. 清理規則後,建議重啓libvirtd和虛擬機,否則會存在虛擬機無法ping通外網的情況
  2. 每次添加轉發規則時,應該都需要執行iptables -D FORWARD的操作,否則無法登錄
  3. 如果在虛擬機部署了Java開發環境,使用vscode遠程開發時,配置Tomcat的端口轉發,不需要在物理機和虛擬機再操作,一切由vscode自行完成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章