Ethernet, Bridge, Bonding, Vlan
Всё работает максимально стандартно, как заведено в CentOS 6.
Настройки лежат в:
/etc/sysconfig/network-scripts/
Возможно какие-либо приложения (например Carbon Reductor) предоставляют дополнительно мастера настройки сети, требующие особенных ухищрений, необходимых для корректной работы, но в целом - это максимально стандартные настройки сети, все параметры отлично гуглятся.
Dummy
Теперь про не совсем стандартные части. Каждое приложение не особо зависит от настроек сети в базовой системе. Свои IP адреса они вешают на виртуальный интерфейс dummy0, реальный трафик попадает на эти IP адреса с помощью iptables (DNAT).
# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.50.140.247/16 brd 10.50.255.255 scope global eth0 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.30.45.1/24 brd 10.30.45.255 scope global eth1 4: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN inet 169.254.80.81/16 scope global dummy0 inet 169.254.80.80/16 scope global secondary dummy0 inet 169.254.80.43/16 scope global secondary dummy0 inet 169.254.80.83/16 scope global secondary dummy0 inet 169.254.80.85/16 scope global secondary dummy0
Firewall
Правила iptables тоже имеют некоторые особенности. Каждый контейнер создаёт свою подцепочку с правилами, например:
# iptables -nvL FORWARD Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 11M 740M reductor_forward all -- * * 0.0.0.0/0 0.0.0.0/0 146 8418 auth_forward all -- * * 0.0.0.0/0 0.0.0.0/0 228 13084 base_forward all -- * * 0.0.0.0/0 0.0.0.0/0
Внутри которых так же могут быть ещё подцепочки:
# iptables -nvL reductor_forward Chain reductor_forward (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 0.0.0.0/0 95.213.143.204 575 34500 reductor_ip_block all -- * * 0.0.0.0/0 0.0.0.0/0 match-set ip_block dst,dst 0 0 reductor_https_dst tcp -- * * 0.0.0.0/0 0.0.0.0/0 match-set port_https dst 0 0 reductor_https_src tcp -- * * 0.0.0.0/0 0.0.0.0/0 match-set port_https src 4476K 299M reductor_http tcp -- * * 0.0.0.0/0 0.0.0.0/0 match-set port_http dst 3716K 231M reductor_dns udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 7759K 485M reductor_other_traffic all -- * * 0.0.0.0/0 0.0.0.0/0 5237K 285M ACCEPT all -- * * 10.30.45.2 0.0.0.0/0 2522K 200M ACCEPT all -- * * 0.0.0.0/0 10.30.45.2
Вопрос/ответ
Почему у меня веб-интерфейс слушает на 169.254.80.80, как я туда вообще попаду?
Вы попадёте туда через DNAT, при обращении на любой доступный вам IP адрес-сервера (например по которому вы подключаетесь по SSH):
[root@carbon ~]# iptables -t nat -nvL | grep DNAT 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 ADDRTYPE match dst-type LOCAL to:169.254.80.80:8080 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8043 ADDRTYPE match dst-type LOCAL to:169.254.80.43:8043 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 match-set base_auth_users src tcp dpt:8081 ADDRTYPE match dst-type LOCAL to:169.254.80.81:8081 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ADDRTYPE match dst-type LOCAL to:169.254.0.80:80 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ADDRTYPE match dst-type LOCAL to:169.254.4.43:443 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 match-set base_auth_users tcp dpt:8083 ADDRTYPE match dst-type LOCAL to:169.254.80.83:8083
Если вас беспокоит то, что веб-интерфейс сервера может быть доступен абонентам - можете дополнительно ограничить доступ к нему по IP адресам в настройках базовой системы (пункт IP адреса/сети администратора/операторов).