У меня есть сценарий, в котором есть серверная машина с двумя интерфейсами. Каждый из этих интерфейсов имеет свой собственный IP-адрес. На серверной машине размещен HTTP-сервер, который должен быть доступен через оба интерфейса.
Полный скрипт Python для воспроизведения этой ситуации:
from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.net import Mininet
from mininet.topo import Topo
class TestTopology(Topo):
def __init__(self):
Topo.__init__(self)
host1_id = self.addHost('h1')
host2_id = self.addHost('h2')
server_id = self.addHost('server')
self.addLink(server_id, host1_id)
self.addLink(server_id, host2_id)
def configure_network(network):
server = network.get('server')
server.setIP('10.0.0.10', intf='server-eth0')
server.setMAC('00:00:00:00:00:10', intf='server-eth0')
server.setIP('10.0.0.11', intf='server-eth1')
server.setMAC('00:00:00:00:00:11', intf='server-eth1')
server.cmd("python -m SimpleHTTPServer 8080 &")
# Run 'sudo python *path_to_this_script*' in mininet VM.
if __name__ == '__main__':
setLogLevel('info')
net = Mininet(topo=TestTopology())
configure_network(net)
net.pingAll()
CLI(net)
SimpleHTTPServer прослушивает 0.0.0.0 по умолчанию.
Тест pingAll показывает, что сервер доступен по h1 (и наоборот), но это не так для h2. Конечно, я тоже не могу wget
с h2.
Как настроить интерфейсы сервера, чтобы сервер отвечал на команды ping
и wget
через оба этих интерфейса?
/etc/network/interfaces
на сервере содержит некоторую конфигурацию, но она относится к несуществующему интерфейсу eth0
, поэтому я предположил, что он не используется.
ПРИМЕЧАНИЕ. Я уже узнал, что для Linux определенный IP-адрес != сетевой интерфейс. Сервер отвечает на пинги как на 10.0.0.10, так и на 10.0.0.11 с h1, но я бы хотел, чтобы он отвечал на обоих физических интерфейсах.