Skip to content

Commit b4af5ee

Browse files
authored
feat: 添加自动映射
1 parent dffbfe0 commit b4af5ee

File tree

1 file changed

+171
-2
lines changed

1 file changed

+171
-2
lines changed

docs/incomplete/webvirtcloud.md

Lines changed: 171 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,178 @@ Error: Failed to add 'br-ext' connection: connection.autoconnect-ports: unknown
136136

137137
安装完成后会生成一个 **Token**,用于在控制端(Admin 面板)中添加计算节点:
138138

139-
路径: `Admin Panel > Computers > Add`
139+
路径: `Admin Panel > Computers > Add Computer`
140140

141-
### 给开设的虚拟机添加公网IP端口映射
141+
`HostName` 需要填写计算节点的公网IPV4地址
142+
143+
`Token` 填在计算节点上获取到的token密钥
144+
145+
### 公网IPV4端口映射
146+
147+
### 自动映射
148+
149+
- **自动监控**:实时监控虚拟机状态变化,自动应用或清理端口映射规则
150+
- **智能端口分配**:根据虚拟机IP地址自动计算和分配不冲突的端口
151+
- **规则持久化**:使用firewall-cmd确保端口映射规则在宿主机重启后依然有效
152+
- **映射记录**:自动维护映射信息记录文件,便于查看和管理
153+
- **冲突防护**:智能检测并避免端口冲突,确保每个虚拟机都有唯一的端口映射
154+
155+
#### 安装方法
156+
157+
1. 下载脚本到临时目录:
158+
159+
```bash
160+
wget -O /tmp/vm_port_mapping_setup.sh https://your-script-url.com/vm_port_mapping_daemon.sh
161+
```
162+
163+
2. 添加执行权限:
164+
165+
```bash
166+
chmod +x /tmp/vm_port_mapping_setup.sh
167+
```
168+
169+
3. 运行安装程序:
170+
171+
```bash
172+
/tmp/vm_port_mapping_setup.sh
173+
```
174+
175+
脚本会自动完成以下操作:
176+
- 将自身复制到系统目录 `/usr/local/sbin/vm_port_mapping_daemon.sh`
177+
- 创建systemd服务单元文件
178+
- 启用并启动服务
179+
180+
#### 端口映射规则
181+
182+
守护进程会为每个虚拟机分配以下端口:
183+
184+
1. **SSH端口**
185+
- 计算公式:`(IP最后一段) × 100 + 22 + 10000`
186+
- 示例:对于IP地址 192.168.33.114,映射的SSH端口为 114×100+22+10000 = 21422
187+
188+
2. **额外端口**
189+
- 每个虚拟机分配10个额外端口
190+
- 起始端口:20000 + (IP最后一段) × 100
191+
- 结束端口:起始端口 + 9
192+
- 示例:对于IP地址 192.168.33.114,额外端口范围为 20000+(114×100) 至 20000+(114×100)+9
193+
194+
如果计算出的端口已被占用,程序会自动寻找下一个可用端口,确保不发生冲突。
195+
196+
#### 映射文件
197+
198+
所有端口映射信息保存在 `/etc/vm_port_mapping/mapping.txt` 文件中,格式为:
199+
200+
```
201+
虚拟机名字 IP地址 MAC地址 SSH映射端口 额外端口起始 额外端口结束
202+
```
203+
204+
例如:
205+
```
206+
Virtance-1 192.168.33.114 52:54:00:5f:77:92 21422 31400 31409
207+
```
208+
209+
#### 服务管理
210+
211+
##### 查看服务状态
212+
213+
```bash
214+
systemctl status vm-port-mapping
215+
```
216+
217+
##### 启动服务
218+
219+
```bash
220+
systemctl start vm-port-mapping
221+
```
222+
223+
##### 停止服务
224+
225+
```bash
226+
systemctl stop vm-port-mapping
227+
```
228+
229+
##### 禁用自启动
230+
231+
```bash
232+
systemctl disable vm-port-mapping
233+
```
234+
235+
##### 查看日志
236+
237+
```bash
238+
journalctl -u vm-port-mapping
239+
#
240+
cat /var/log/vm_port_mapping.log
241+
```
242+
243+
##### 手动触发规则更新
244+
245+
如果需要手动触发规则更新,可以重启服务:
246+
247+
```bash
248+
systemctl restart vm-port-mapping
249+
```
250+
251+
#### 常见问题
252+
253+
##### 端口映射不生效
254+
255+
检查以下内容:
256+
- 确认服务正在运行:`systemctl status vm-port-mapping`
257+
- 检查日志文件:`cat /var/log/vm_port_mapping.log`
258+
- 确认防火墙服务正常:`systemctl status firewalld`
259+
- 验证虚拟机网络接口配置:`virsh domiflist 虚拟机名称`
260+
261+
##### 手动添加映射规则
262+
263+
通常不需要手动添加规则,但如果需要,可以这样操作:
264+
265+
1. 停止服务:
266+
```bash
267+
systemctl stop vm-port-mapping
268+
```
269+
270+
2. 编辑映射文件:
271+
```bash
272+
nano /etc/vm_port_mapping/mapping.txt
273+
```
274+
275+
3. 启动服务:
276+
```bash
277+
systemctl start vm-port-mapping
278+
```
279+
280+
##### 清理所有规则
281+
282+
如需清理所有端口映射规则:
283+
284+
```bash
285+
systemctl stop vm-port-mapping
286+
iptables -t nat -F PREROUTING
287+
iptables -t nat -F POSTROUTING
288+
firewall-cmd --reload
289+
```
290+
291+
##### 安全建议
292+
293+
- 定期检查映射文件和日志,确保没有未授权的映射
294+
- 不要手动修改 `/etc/vm_port_mapping/` 目录下的文件,除非你完全了解其影响
295+
- 确保 `firewalld` 服务正常运行,以便规则能够正确持久化
296+
297+
#### 卸载方法
298+
299+
如需卸载此服务:
300+
301+
```bash
302+
systemctl stop vm-port-mapping
303+
systemctl disable vm-port-mapping
304+
rm -f /etc/systemd/system/vm-port-mapping.service
305+
rm -f /usr/local/sbin/vm_port_mapping_daemon.sh
306+
rm -rf /etc/vm_port_mapping
307+
systemctl daemon-reload
308+
```
309+
310+
#### 手动映射
142311

143312
假设此时你的虚拟机在用户端控制面板显示为
144313

0 commit comments

Comments
 (0)