Спасибо за ответы, но не работает.
Для чистоты эксперимента поступил следующим образом.
Набросал следующую программу:#!/usr/bin/perl -w
use strict;
use IO::Socket;
my $quit=0;
$SIG{INT}=sub {$quit=1};
my $listen_socket = IO::Socket::INET->new(LocalPort=>5000,
Listen=>5,
Proto=>'tcp',
Reuse=>1,
Timeout=>3600);
die "Error 1:$@" unless $listen_socket;
warn "Waiting for connection...\n";
my $count=0;
while(!$quit){
next unless my $conn=$listen_socket->accept;
$count++;
warn "$count\n";
$conn->close;
}
$listen_socket->close;
warn "Bye!\n"
Вообщем все просто:открыли сокет и слушаем порт 5000. Если что-то пришло - выводим $count.
Если в открытии сокета не указывать LocalAddr, то программа слушает все интерфейсы.
Можно проверить:
telnet 192.168.0.5 5000
telnet 127.0.0.1 5000
telnet xxx.xxx.xxx.xxx 5000
приводят к реакции программы (xxx.xxx.xxx.xxx-внешний IP-шник).
Теперь добавим в открытие сокета конкретный интерфейс:
my $listen_socket = IO::Socket::INET->new(LocalAddr=>'127.0.0.1',
LocalPort=>5000,
Listen=>5,
Proto=>'tcp',
Reuse=>1,
Timeout=>3600);
Теперь к реакции программы приводит только
telnet 127.0.0.1 5000
Так вот вопрос, возможно ли с помощью iptables добиться ответа программы
теперь подключившись с других сетевых интерфейсов?