Маршрутизация IP к домену

Я полагаю, что это связано с шрифтом. В текстовом режиме используются различные шрифты, чем в X. Простое гуглинг говорит, что это может быть невозможно достичь в текстовом методе Arch Linux forum и LFS Console

-121--230125-

Так, как указывает @ muru в Я управлял всем этим, но часть unlockpt () . В соответствии с чем-то, что я прочитал здесь , возможно, есть некоторые параметры компиляции времени в ядре для отключения вновь созданной блокировки pty, но я не хотел этого делать. Итак, я сделал что-то другое.

На самом деле мне не нужен grantpt () . В соответствии с приведенным здесь описанием все, что он делает, это изменяет UID/GID для файла устройства /dev/pts/[ num] . Но согласно человеку есть более простые способы справиться с этим. Ниже приведены некоторые опции монтирования devpts :

  • uid = value и gid = value
    • . Это устанавливает для владельца или группы вновь созданных PTY указанные значения. Если ничего не указано, для них будут установлены UID и GID процесса создания. Например, если существует группа tty с GID 5, то gid = 5 приведет к тому, что вновь созданные PTY будут принадлежать группе tty .

Это уже было в моей системе по умолчанию. Но прочитав, я понял, что, возможно, захочу все-таки изменить. Следующий раздел гласит:

  • ptmxmode = value
    • Наборов режим для нового узла устройства ptmx в файловой системе devpts .
    • При поддержке нескольких экземпляров devpts (см. опцию newinstance выше) каждый экземпляр имеет частный узел ptmx в корне devpts файловой системы (обычно /dev/pts/ptmx ) .
    • Для совместимости со старыми версиями ядра по умолчанию используется режим нового узла ptmx 0000 . ptmxmode = value указывает более полезный режим для узла ptmx и настоятельно рекомендуется, когда задан параметр newinstance .

Несмотря на то, что это сработало бы без этого, мне понравилась идея и я установил ее на 0640 , как рекомендовано в документации по ядру . Ссылка kernel doc, по пути, развивает опцию newinstance mount - что довольно круто и в основном позволяет получить отдельно разнесенную по имени группу ptys на /dev/ptmx mount.

В любом случае, так что что-то еще было в основном:

mount -o remount,newinstance,gid=5,ptmxmode=0640 /dev/pts
mount --bind /dev/pts/ptmx /dev/ptmx

... как ядро документы рекомендуют - см. ссылку о том, почему. Я также сделал эффект вышеуказанных команд постоянным, добавив пару строк в мой /etc/fstab .

И...

<<\C cc -xc - -o pts
#include 
int main(int argc, char *argv[]) {
        if(unlockpt(0)) return 2;
        char *ptsname(int fd);
        printf("%s\n",ptsname(0));
        return argc - 1;
}
C

Которая просто компилирует крошечную маленькую программу C, которая пытается вызвать unlockpt () на своем stdin и если успешно напечатает имя вновь созданной и разблокированной pty в stdout или в противном случае молча возвращает 2.

Как только это было сделано, я мог создать свои собственные экранированные процессы, такие как:

exec 3<>/dev/ptmx

... чтобы получить главную сторону fd в текущей оболочке тогда...

(setsid -c "$0" -i 2>&1|tee log) <>"$(./pts <&3)" 3>&- >&0 &

На другом конце псевдотерминала в фоновом режиме выполняется интерактивная оболочка. Он интерпретирует все, что напечатано на > & 3 , как пользовательский ввод.

mikeserv@localhost$ echo echo hey >&3
mikeserv@localhost$ cat log
$ hey
$
mikeserv@localhost$ echo echo hey >&3
mikeserv@localhost$ cat log
$ hey
$ hey
$ 

Который в основном связывает меня фоновый, протоколированный, интерактивный интерпретатор (или что-либо еще, что я могу хотеть, чтобы запустить на этих) ala экран без столько накладных расходов и на любой файл дескриптор я выбираю.

Ведущая сторона fd, принадлежащая моей текущей оболочке, является единственным средством обслуживания входа ведомой стороны и может быть записана только моим текущим процессом оболочки (и его дочерними) . Я могу связаться с другой стороной, написав в > & 3 , и я могу либо читать из того же или из файла журнала, как я хочу.

И stty работает на терминале:

mikeserv@localhost$ echo stty -a ">$(tty)" >&3
speed 38400 baud; rows 0; columns 0; line = 0;                                      
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ;
swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc
-ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl
echoke

-121--74182-

Можно использовать группу процессов:

set -m
(
   for part in input_*; do
     (python3 "$part" || kill 0) &
   done
   wait
)

set -m (и дополнительная функция оболочки POSIX, обязательная функция оболочки Unix) запускает задания в собственной группе процессов. В bash , yash , zsh , mksh , это задания субоболочки, где set -m включен, поэтому внешний (...) и все процессы, созданные в этой группе, будут помещены в ту же группу процессов.

Для тире и других оболочек на основе золы , которые работают только в процессе оболочки верхнего уровня. Так что этот код будет работать, если он не помещен в дополнительный корпус.

Это не будет работать в AT & T ksh или старой оболочке SysV/Bourne вообще.

kill 0 посылает сигнал SIGTERM всем участникам текущей группы процессов.

0
09.12.2014, 14:08
2 ответа

Решение 2-частей:

  1. Использование iPtables, вы можете сделать некоторые преподобные для захвата всех трафика для ABCD (удаленный сервер), а затем замаскируйте этот трафик и перенаправляйте его на EFGH (ваш IP-адрес Noip.com)

  2. Используя скрипт CRON, запустив каждый N минут, если IP изменился, очистите правила iPTables и вставьте их новым IP.

Я не проверил его, но вот как я начну:

iptables -t nat -I PREROUTING -s [localwanip] -d [remoteip] -p -m tcp --dport [port] --to-destination [newremoteip]

... и скрипт, снова требуется проверки (результаты могут варьироваться в зависимости от версий и вкуса системного вкуса):

#!/bin/bash

NOIPNAME=yourname.noip.com
# Your IP on your WAN interface
LOCALIP=1.2.3.4
# The IP the software is _mistakenly_ trying to talk to
REMOTEIP=4.3.2.1
# The TCP port the software is using to connect to the remote IP
PORT=1234
# Just a file to keep track of what the last IP was...
REMEMBERFILE=/var/run/oldip.txt

# and now the magic, if it works...

HOSTLINE=$(host $NOIPNAME ns1.no-ip.com | grep 'has address')
HOSTLEN=$(echo $HOSTLINE | wc -m)

# Make sure the return string is > 8 characters (1.2.3.4\n)
if [ $HOSTLEN -lt 8 ]; then
  # Host resolve failure
  echo "Bad host"
  exit 1
fi

# Extract the IP from the return string.
DYNIP=$(echo $HOSTLINE | sed -rn 's/^.* ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/p')

OLDIP=$(cat $REMEMBERFILE)

if [ "x$DYNIP" = "x$OLDIP" ]; then
    # Nothing to do.
    exit 0
else
    echo $DYNIP > $REMEMBERFILE
fi

# Flush
iptables -t nat -F
# and re-write
iptables -t nat -I PREROUTING -s $LOCALIP -d $REMOTEIP -p -m tcp --dport $PORT --to-destination $DYNIP

exit 0

наконец, добавить его крон; Ниже проходит каждые 10 минут (через эту часть: * / 10).

echo "*/10    *  *  *   *   root /your/path/to/script" >> /etc/crontab

Предостережения: Теперь iptables будет сложно, если команда, которую я дал, не работает (вероятно, не будет - это было просто предположение) - есть копаться в Google, например:

http://ribbalious.com/rewrite -Дестинация - IP-адрес - с использованием IPTables /

Удачи.

1
28.01.2020, 02:51

В устройстве необходимо установить IP-адрес системы Linux. Этот Linux будет выполнять NAT (iptables, см. DNAT). Она также будет регулярно проверять обновления DNS и соответствующим образом обновлять конфигурацию DNAT. Конечно, вы можете потерять некоторые данные из-за изменения IP-адреса.

0
28.01.2020, 02:51

Теги

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