Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Вывести значение присвоенного IP-адреса в файл  (Прочитано 1944 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shushpanchik

  • Автор темы
  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
    • SKSS - "Современные компьютерные сети и системы"
Приветствую великих гуру замечательной ОСи! Возник вот какой вопрос. Итак, по порядку.

Есть Ubuntu server (думаю версия особо не важна в данном случае). В интернет ходит eth1 по PPPoE стандартным pppd-демоном. Все работает, проблем нет. Сервак является шлюзом. Инет в локаль на eth0 раздается по правилу SNAT (не MASQUERADE). Проблем с этим так же нет. Внешний IP всегда постоянный. Но иногда приходится сменить логин доступа в инет на другой из официально мне доступных. Есть пароли, есть все. На всех имеющихся у меня логинах постоянные IP-адреса из белого диапазона. Но хочется немного автоматизировать процесс перехода на другой логин. То есть, сменить логин вручную в файле /etc/ppp/peers/нужный_файл не влом, хотя тоже можно автоматизировать. Проблема (по крайней мере для меня пока что) назначить какой-то переменной (например $EXT_IP)присвоенный IP, чтобы потом в правиле SNAT писать не например

iptables -t nat -A POSTROUTING -s 192.168.26.0/24 -o ppp0 -j SNAT --to-source внешний_IP
а к примеру
iptables -t nat -A POSTROUTING -s 192.168.26.0/24 -o ppp0 -j SNAT --to-source $EXT_IPпредварительно назначить переменной $EXT_IP присвоенный на время открытой интернет-сессии IP-адрес.

Догадываюсь, что можно сделать по принципу PID-файла при поднятии службы/интерфейса (нужное подчеркнуть), но откуда и как выделить именно IP - не имею понятия.

Прошу гуру указать в каком направлении копать или ткнуть в ссылку если обсуждалось. Заранее спасибо!

Зы. Вариант перейти на MASQUERADE не предлагать.

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2261
    • Просмотр профиля
Если речь о том, чтобы определить присвоенный _внешний_ адрес, то вот такой вариант как-то проскакивал на форуме: http://showmyip.com/simple

Гарри Кашпировский

  • Гость
Ну например вот так.
Код: Text
  1. /sbin/iptables -t nat -A POSTROUTING -o $1 -s 192.168.26.0/24 -j SNAT --to-source $4
Код: Text
  1. /sbin/iptables -t nat -D POSTROUTING -o $1 -s 192.168.26.0/24 -j SNAT --to-source $4

Пользователь решил продолжить мысль 24 Январь 2011, 22:31:27:
Цитировать
То есть, сменить логин вручную в файле /etc/ppp/peers/нужный_файл не влом, хотя тоже можно автоматизировать.
Не понял, а зачем менять? Делаешь столько нужных_файлов сколько_нужно и в chap-secrets столько_нужных_логинов сколько_нужно.
« Последнее редактирование: 24 Январь 2011, 22:31:27 от KT315 »

Оффлайн Unreg

  • Активист
  • *
  • Сообщений: 751
  • Ubuntu 8.04 / Acer Aspire One 110 > Debian 5.04
    • Просмотр профиля
    • LJ
WAN=eth0
LAN=eth1
WAN_VPN=ppp999

WAN_IP="`/sbin/ifconfig $WAN | head -n 2 | sed 'N;s/\n/ /' | awk '{print $7}'  | sed -e 's/addr://'`"
INT_NET="`ip addr show $LAN | grep inet | awk '{print $2}'`"
VPN_IP="`/sbin/ifconfig $WAN_VPN | head -n 2 | sed 'N;s/\n/ /' | awk '{print $8}' | sed -e 's/addr://'`"

iptables -t nat -A POSTROUTING -s $INT_NET -o $WAN -j SNAT --to-source $WAN_IP -v
iptables -t nat -A POSTROUTING -s $INT_NET -o $WAN_VPN -j SNAT --to-source $VPN_IP -v
« Последнее редактирование: 24 Январь 2011, 22:40:42 от Unreg »

Оффлайн shushpanchik

  • Автор темы
  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
    • SKSS - "Современные компьютерные сети и системы"
Unreg, то что доктор прописал!!! Спасибо! Только чуток подправил под себя! Но работает!

Учитывая что всё, кроме внешнего IP не меняется - сделал так:
EXT_IP="`/sbin/ifconfig ppp0 | head -n 2 | sed 'N;s/\n/ /' | awk '{print $6}'  | sed -e 's/addr://'`"
iptables -t nat -A POSTROUTING -s 192.168.26.0/24 -o ppp0 -j SNAT --to-source $EXT_IP -v

Можно закрывать.
« Последнее редактирование: 24 Январь 2011, 22:54:26 от shushpanchik »

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Ещё пара способов выковыривания ip:
ifconfig | awk -F':| *' '/inet /{print $4}'
ifconfig | awk '/inet /{print substr($2,6)}'
ifconfig | perl -nE '/dr:(\S+)/ && say $1'

Гарри Кашпировский

  • Гость
Ну вы ребята костылеводы  :2funny:
ifconfig head grep awk sed :)

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
ппц, вы когда маны научитесь читать?
Цитата: man pppd
SCRIPTS
       Pppd  invokes scripts at various stages in its processing which can be used to perform site-specific ancillary processing.  These scripts are usu‐
       ally shell scripts, but could be executable code files instead.  Pppd does not wait for the scripts to finish (except for the  ip-pre-up  script).
       The  scripts  are executed as root (with the real and effective user-id set to 0), so that they can do things such as update routing tables or run
       privileged daemons.  Be careful that the contents of these scripts do not compromise your system’s security.  Pppd runs the scripts with  standard
       input, output and error redirected to /dev/null, and with an environment that is empty except for some environment variables that give information
       about the link.  The environment variables that pppd sets are:

       IPLOCAL
              The IP address for the local end of the link.  This is only set when IPCP has come up.

       IPREMOTE
              The IP address for the remote end of the link.  This is only set when IPCP has come up.

Оффлайн chikatillo

  • Участник
  • *
  • Сообщений: 139
    • Просмотр профиля
Не могу добиться вывод шлюза для eth2, настройки получает по dhcp(не ppp0), подскажите пожалуйста!

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Не могу добиться вывод шлюза для eth2, настройки получает по dhcp(не ppp0), подскажите пожалуйста!
Это вам в dhclient и route.
Шаг за шагом можно достичь цели.

Оффлайн chikatillo

  • Участник
  • *
  • Сообщений: 139
    • Просмотр профиля
в route выводит 82.ххх.ххх.0

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Грубый хак: грепнуть сислог на предмет отчетов от dhclient
и оттуда вычленить полученный им ответ о gateway для eth2

или смотреть route -n на предмет маршрутов для eth2 c шлюзом
Шаг за шагом можно достичь цели.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
ip route list table all | grep eth2 | grep deafult
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн chikatillo

  • Участник
  • *
  • Сообщений: 139
    • Просмотр профиля
ip route list table all | grep eth2 | grep deafult
Не чего не выводит...
смотрел и так  -  ip route list table all
единственное что вижу 82.ххх.ххх.0/24
Сейчас просто вручную шлюз прописываю, вытащил его когда компу на винде подключал - 82.ххх.ххх.1,если бы он был не динамический(

Пользователь решил продолжить мысль 20 Апрель 2011, 10:20:12:
Грубый хак: грепнуть сислог на предмет отчетов от dhclient
и оттуда вычленить полученный им ответ о gateway для eth2

или смотреть route -n на предмет маршрутов для eth2 c шлюзом

Что проще вариантов нет, неужели нужно так извращаться?(....
« Последнее редактирование: 20 Апрель 2011, 10:20:12 от chikatillo »

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
У вас DHCP сервер выдает адрес шлюза?
DHCP клиент запрашивает его?

Если ответ ДА на оба вопроса - то шлюз пропишется в таблице маршрутов.
И достать его можно как оттуда, так и из вывода dhclient.
Шаг за шагом можно достичь цели.

 

Страница сгенерирована за 0.207 секунд. Запросов: 24.