Настройка lxc-контейнеров в разных vlan
с1 - имя первого контейнерас2 - имя второго контейнераenp0s3 - имя интерфейса хостевой машины
192.168.10.3 - IP хостевой машины, который смотрит наружу (WAN)
DEVICETYPE="OVSIntPort"OVS_BRIDGE=ovs-br0_c1OVS_BRIDGE=ovs-br0_c2
ovs-br0_c1 - шлюз для с1ovs-br0_c2 - шлюз для с2
- nano ifcfg-ovs-br0_c1
DEVICE="ovs-br0_c1"DEVICETYPE=ovsNM_CONTROLLED="no"PEERDNS=yesONBOOT="yes"TYPE="OVSBridge"BOOTPROTO="static"IPADDR=10.101.0.1NETMASK=255.255.255.0HOTPLUG="no"
- nano ifcfg-ovs-br0_c2
DEVICE="ovs-br0_c2"DEVICETYPE=ovsNM_CONTROLLED="no"PEERDNS=yesONBOOT="yes"TYPE="OVSBridge"BOOTPROTO="static"IPADDR=10.102.0.1NETMASK=255.255.255.0HOTPLUG="no"
Где:
10.101.0.1 - шлюз для c1
10.102.0.1 - шлюз для c2
Настройка config-файла контейнеров:
lxc.network.link - закомментировать
для с1:
lxc.network.name = eth1
lxc.network.ipv4=10.101.0.2/24
lxc.network.ipv4.gateway=10.101.0.1
lxc.network.script.up=/etc/lxc/ovsup_c1
для с2:
lxc.network.name = eth1
lxc.network.ipv4 = 10.102.0.2/24
lxc.network.ipv4.gateway = 10.102.0.1
lxc.network.script.up=/etc/lxc/ovsup_c2
Настройка скриптов в /etc/lxc
- nano ovsup_c1
#!/bin/bash
BRIDGE="ovs-br0_c1"
ovs-vsctl --may-exist add-br $BRIDGE
ovs-vsctl --if-exists del-port $BRIDGE $5
ovs-vsctl --may-exist add-port $BRIDGE $5 tag=1
- nano ovsup_c2
#!/bin/bash
BRIDGE="ovs-br0_c2"
ovs-vsctl --may-exist add-br $BRIDGE
ovs-vsctl --if-exists del-port $BRIDGE $5
ovs-vsctl --may-exist add-port $BRIDGE $5 tag=2
Где:
tag=1 - тег для c1
tag=2 - тег для c2
Добавляем теги на шлюзы контейнеров:
ovs-vsctl set port ovs-br0_c1 tag=1
ovs-vsctl set port ovs-br0_c2 tag=2
Пробрасываем интернет в контейнеры:
- nano /etc/iptables.sh
#!/bin/bash
#
# Объявление переменных
export IPT="iptables"
# Интерфейс который смотрит в интернет
export WAN=enp0s3
export WAN_IP=192.168.10.3
# lxc сеть
export LAN1=ovs-br0_c1
export LAN2=ovs-br0_c2
export LAN1_IP_RANGE=10.0.0.0/8
# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT
# Разрешаем доступ из lxc наружу и обратно
$IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
$IPT -A FORWARD -i $WAN -o $LAN1 -j ACCEPT
$IPT -A INPUT -i $LAN1 -j ACCEPT
$IPT -A OUTPUT -o $LAN1 -j ACCEPT
$IPT -A FORWARD -i $LAN2 -o $WAN -j ACCEPT
$IPT -A FORWARD -i $WAN -o $LAN2 -j ACCEPT
$IPT -A INPUT -i $LAN2 -j ACCEPT
$IPT -A OUTPUT -o $LAN2 -j ACCEPT
# Включаем NAT
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
# Пробрасываем порты в контейнер lxc_centos
#$IPT -t nat -A PREROUTING -p tcp --dport 23543 -i ${WAN} -j DNAT --to 10.1.1.2:22
#$IPT -t nat -A PREROUTING -p tcp --dport 80 -i ${WAN} -j DNAT --to 10.1.1.2:80
#$IPT -t nat -A PREROUTING -p tcp --dport 443 -i ${WAN} -j DNAT --to 10.1.1.2:443
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Рзрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Записываем правила
/sbin/iptables-save > /etc/sysconfig/iptables
Смотрим настройки интерфейсов в ovs
- ovs-vsctl show
Bridge "ovs-br0_c1"
Port "ovs-br0_c1"
tag: 1
Interface "ovs-br0_c1"
type: internal
Port "veth5TMR0K"
tag: 1
Interface "veth5TMR0K"
Bridge "ovs-br0_c2"
Port "ovs-br0_c2"
tag: 2
Interface "ovs-br0_c2"
type: internal
Port "vethE8DCUU"
tag: 2
Interface "vethE8DCUU"
Комментарии
Отправить комментарий