Изучить принципы построения изолированных виртуальных сетей в PVE, освоить базовую настройку маршрутизации и NAT с помощью iptables, а также получить практические навыки интеграции веб-сервера (Nginx + PHP) с сервером баз данных (MariaDB/MySQL) по сети.
В рамках работы необходимо создать две сети:
vmbr0 (существующий мост с доступом в интернет).vmbr1 (сеть 10.0.0.0/24).Виртуальные машины:
192.168.1.100).10.0.0.1.10.0.0.2, шлюз 10.0.0.1.10.0.0.3, шлюз 10.0.0.1.vmbr1. Поле Bridge ports оставьте пустым (это создаст изолированную сеть). Нажмите Apply Configuration.vmbr0, второе к vmbr1.vmbr1.ip a. Допустим, внешний (WAN) — это eth0, а внутренний (LAN) — eth1.vim /etc/net/ifaces/eth1/ipv4address
10.0.0.1/24
vim /etc/net/ifaces/eth1/resolv.conf
nameserver 8.8.8.8
Примените настройки: systemctl restart network.
net.ipv4.ip_forward=1 в файле /etc/sysctl.conf и примените:sysctl -p
eth0 укажите ВАШ внешний интерфейс:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
eth0 укажите ВАШ внешний интерфейс:iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
eth0):vim ipv4address
10.0.0.3/24
vim ipv4route
default via 10.0.0.1
vim resolv.conf
nameserver 8.8.8.8
Примените настройки: systemctl restart network. Проверьте наличие интернета (ping ya.ru).
apt-get update && apt-get install mariadb-server
systemctl enable --now mariadb.service
/etc/my.cnf.d/server.cnf или /etc/my.cnf.d/mariadb-server.cnf):vim /etc/my.cnf.d/server.cnf
Найдите блок [mysqld] и добавьте/измените строку:
bind-address = 0.0.0.0
Перезапустите службу: systemctl restart mariadb.
mysql
CREATE DATABASE example_db;
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'%';
FLUSH PRIVILEGES;
USE example_db;
CREATE TABLE test (item_id INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(item_id));
INSERT INTO test (content) VALUES ("Test1");
INSERT INTO test (content) VALUES ("Test2");
EXIT;
10.0.0.2/24. Примените настройки (systemctl restart network). Проверьте интернет.apt-get update
apt-get install nginx php8.2-fpm-fcgi php8.2-mysqlnd php8.2-mysqlnd-mysqli
systemctl enable --now php8.2-fpm
.conf. Создайте файл /etc/nginx/sites-available.d/default.conf:vim /etc/nginx/sites-available.d/default.conf
Приведите его к следующему виду:
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Активируйте конфиг и перезапустите Nginx:
ln -s /etc/nginx/sites-available.d/default.conf /etc/nginx/sites-enabled.d/default.conf
systemctl enable --now nginx
systemctl restart nginx
/var/www/html/index.php:mkdir -p /var/www/html
vim /var/www/html/index.php
Вставьте следующий код:
<?php
$user = "example_user";
$password = "password";
$database = "example_db";
$table = "test";
// Подключаемся к IP-адресу сервера БД (VM3)
$conn = mysqli_connect("10.0.0.3", $user, $password, $database);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "<h2>Вывод из БД MariaDB</h2><ol>";
foreach($conn->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
mysqli_close($conn);
?>
Удалите дефолтный файл Nginx (если есть): rm -f /var/www/html/index.html.
ip a (на внешнем интерфейсе).http://<IP_РОУТЕРА>.net.ipv4.ip_forward=1 на маршрутизаторе?PREROUTING и POSTROUTING в таблице nat iptables?bind-address = 0.0.0.0 в конфигурации MariaDB?