След на файле hosts LAN

Соединения VPN работают путем создания туннелей между клиентом и сервером. Эти туннели являются по существу очень маленькими подсетями с 4 адресами. В вышеупомянутом данном диапазоне адресов Ваш первый туннель будет использовать подсеть 192.168.42.100/30, и адреса используются как это:

  1. 192.168.42.100 сетевой адрес
  2. 192.168.42.101 адрес конечной точки сервера
  3. 192.168.42.102 адрес клиентской конечной точки
  4. 192.168.42.103 широковещательный адрес подсети

При соединении второго клиента с сервером VPN следующая подсеть будет использоваться (192.168.42.104/30). Это необходимо так, чтобы сервер VPN мог направить трафик клиентам. Таким образом, когда Ваш клиент говорит с 192.168.42.101, это на самом деле не говорит с сервером, это говорит с конечной точкой VPN своего туннеля. Это, оказывается, находится на сервере, и поэтому вещи обычно работают (особенно, если сервисы на сервер не ограничиваются входящим трафиком на конкретной подсети или интерфейсе),

Однако сервер также доступен клиентам через свой очень собственный основной IP-адрес (или, если DNS настроен через его имя хоста). Ваше сообщение не упоминает это, но от того, что Вы пишете, мы можем, вероятно, безопасно предположить, что это - другой адрес в 192.168.42.0/24 подсети. И тот адрес никогда не изменяется, неважно, сколько клиентов соединяется.

2
задан 8 August 2012 в 21:41
7 ответов

Незначительный bash:

$ cat /path/to/machosts
macs[mypc1]=00:1f:d0:34:e0:ea 
macs[mypc2]=00:1f:d0:34:a1:06 

$ cat wakeonlan.sh
#!/bin/bash

. /path/to/machosts

echo wakeonlan ${macs[$1]}

$ ./wakeonlan.sh mypc1
wakeonlan 00:1f:d0:34:a1:06

Здесь используются массивы bash: http://tldp.org/LDP/abs/html/arrays.html

unix.stackexchange. com, вероятно, может больше помочь в выполнении этого сценария и того, который обрабатывает вывод arp.

4
ответ дан 3 December 2019 в 08:39

Утилита etherwake (восходящий поток кажется мертвым) может читать MAC-адреса из / etc / ethers (или другого типа эфиров база данных, указанная в /etc/nsswitch.conf ).

3
ответ дан 3 December 2019 в 08:39

I've written a little script that retrieves the mac-address and hostname or ip-address from the dhcpd.conf and then construct the wakeup packet (improved version of someone else' perl script). If you want, I can put it on pastebin.com or such.

0
ответ дан 3 December 2019 в 08:39

Я создал для него свой собственный сценарий bash:

#!/bin/bash

die () {
  echo >&2 "$@"
  exit 1
}

# we need one parameter - the hostname or IP address
[ "$#" -eq 1 ] || die "1 argument required, $# provided"

if [[ ! -f "/etc/machosts" ]]; then
  die "Can't find /etc/machosts file!"
fi

host="$1"

# if argument isn't an IPv4 address, try to resolve it
if [[ ! $host =~ ^([0-2]?[0-9]{1,2}\.){3}([0-2]?[0-9]{1,2})$ ]]; then
  echo "Attempting to identify IP from name: $host..."
  host=$(getent ahosts $host | head -n 1 | cut -d" " -f1)
fi

if [[ ! $host =~ ^([0-2]?[0-9]{1,2}\.){3}([0-2]?[0-9]{1,2})$ ]]; then
  die "Invalid hostname"
fi

mac=""

# read /etc/machosts line by line
while read line
do
  if [[ !(${line:0:1} == "#") && ( -n "$line" ) ]]; then
    ip=$(echo $line | cut -d" " -f2)
    addr=$(echo $line | cut -d" " -f1)

    if [[ $ip == $host ]]; then
      mac=$addr
      break
    fi
  fi
done < "/etc/machosts"

if [[ -z $mac ]]; then
  die "No MAC address asociated with that host!"
fi

wakeonlan $mac

exit 0

Мои файлы / etc / machosts выглядят так:

# here the MAC hosts are defined
#
# e.g. 50:e7:24:ab:c0:d3 10.3.12.5

50:e5:49:1a:8c:9c 192.168.0.4
00:1f:d0:34:e0:ea 192.168.0.5
00:25:22:b1:f6:be 192.168.0.6
00:1f:d0:34:a1:06 192.168.0.7
2
ответ дан 3 December 2019 в 08:39

arp -a выведет список кеш-таблицы ARP в вашей системе, в которой должны отображаться MAC-адреса для IP-адресов в локальной подсети вашего компьютера, к которой вы недавно обращались. Однако для предполагаемого использования эта таблица может оказаться бесполезной, поскольку записи в этой таблице могут быть удалены и будут удалены через некоторое время. Этот период времени зависит от реализации стека TCP ОС.

Конечно, можно было бы иметь постоянно работающий сценарий, который периодически выполняет команду arp -a и обновляет файл с полученной новой информацией.

0
ответ дан 3 December 2019 в 08:39

" Есть ли [...] файл, связывающий MAC-адреса с IP-адресами [...] в Linux? "

Да, вроде: / proc / net / arp . Но, конечно, это не настоящий постоянный файл.

Стандартный файл для ваших целей - / etc / ethers , но вы должны его создать и заполнить. Делать это вручную скучно, но написать командную строку для этого - весело.

Вы можете

  • пропинговать все хосты и проанализировать / proc / net / arp (или arp -n , если не в Linux),

  • или вы можете использовать nmap ( sudo apt-get install nmap ?), Чтобы просканировать локальную сеть и дать вам оба IP и MAC-адреса.

Первое решение могло бы быть примерно таким:

for i in `seq 1 254`; do
    ip=192.168.1.$i
    if ping -c 1 -w 1 $ip >/dev/null; then
        mac=$(grep "^$ip" /proc/net/arp | awk '{print $4}')
        echo "$mac  $ip"
    fi
done

Решение nmap, которое должно быть быстрее, могло бы выглядеть так:

1
ответ дан 3 December 2019 в 08:39

Инструмент, который справится с большинством из них arpwatch . По умолчанию (по крайней мере, в Debian) записывается в /var/lib/arpwatch/arp.dat . Этот файл очищается и обновляется каждый раз, когда arpwatch останавливается.

Файл содержит записи следующего вида:

52:54:00:aa:bb:cc  192.168.1.2  1452252063  somehostname  eth0

Для файла / etc / ethers требуется только MAC-адрес и либо IP-адрес, либо разрешаемое имя хоста:

52:54:00:aa:bb:cc  192.168.1.2

Тогда довольно просто обновить / etc / ethers и синхронизировать его с небольшим скриптом, запускаемым ежедневно из crontab :

#!/bin/bash

# Flush arp.dat
service arpwatch restart

# Save a copy
test -f /etc/ethers || touch /etc/ethers
cp -fp /etc/ethers /etc/ethers.old

# Check to see if anything new has arrived. If so rebuild the file
(
    echo '# This file is updated automatically from /var/lib/arpwatch/arp.dat'
    echo '# Take care when editing'
    echo '#'
    (
        awk '{print $1,$2}' /var/lib/arpwatch/arp.dat
        grep -v '^#' /etc/ethers.old
    ) |
        sort -u
) >/etc/ethers.tmp

# Update ethers with the new file
cmp -s /etc/ethers.tmp /etc/ethers || cat /etc/ethers.tmp >/etc/ethers
rm -f /etc/ethers.tmp

# All done
exit 0
1
ответ дан 3 December 2019 в 08:39

Теги

Похожие вопросы