Интернет не работает, когда VPN произошла

из Человек Bash Под Условные выражения :

-t fd  
    True if file descriptor fd is open and refers to a terminal.

Предполагая, что FD 1 является стандартным, , если [-T 1]; Тогда должен работать для вас. Руководство по скриптуре утверждает, что --t , используемый таким образом SSH SSH , и что тест (с использованием stdin, не STDOUT) должен быть:

if [[ -t 0 || -p /dev/stdin ]]

-P Испытания, если файл существует и представляет собой названную трубу. Однако , я бы отметил, что это не относится к мне: -P / dev / stdin не выполняется как для нормальных клемм, так и для сессий SSH, тогда как , если [-t 0] (ИЛИ -T 1 --t 1 ) работает в обоих случаях (см. Также Gilles Comments ниже о проблемах в этом разделе Усовершенствованного руководства Screpting Screpting ).


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

!#/bin/bash

export SPECIAL_CONTEXT=1
/path/to/real/script.sh

Вызовите это live_script.sh или что-то еще и дважды щелкните этому вместо этого. Конечно, вы можете выполнить то же самое с аргументами командной строки, но обертка все равно потребуется, чтобы сделать точку и щелкнуть в работе браузера файлов GUI.

1
18.02.2015, 12:01
1 ответ

$ sed '4 a\

>' grep "ключ" temp_file "desired.txt

Попробуйте этот ключ. Опция a используется после строки No 4. Также можно задать опцию i перед строкой № 4

Надеюсь, это сработает.

-121--108560-

Другим способом выполнения задачи является использование команды nl с опцией -nln . Здесь нумеруются строки из файла. Например..

echo-e «a\nb\nc\n» | nl -nln -

будет производить:

 1  a
 2  b
 3  c

Теперь все остается, чтобы переместить числа справа от слов. Это можно сделать с помощью sed следующим образом:

sed 's/^\( [^\t] *\) [\t] *\( [^\t]. *\) $/\2\1/g'

Что это делает, так это находит первое слово в строке (Чтобы найти первое слово, мы должны включить только те символы, кроме космоса и табуляции. Это делается с помощью [^\t] ) и запоминает его как \1 и часть строки, следующую за пробелами, как \2 , и заменяет строку на \2\1 .

Поэтому конечной командой будет

cat filename | nl -nln - | sed 's/^\( [^\t] *\) [\t] *\( [^\t]. *\) $/\2\1/g'

-121--175093-

По какой-то причине ваш клиент не может удалить текущий маршрут по умолчанию, когда

То, что вам придется сделать, это дать текущему маршруту меньшую метрику (большее число), прежде чем туннель подойдет. Вы можете увидеть метрику с помощью команды route -n:

# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.3.0     10.8.1.2        255.255.255.0   UG    0      0        0 tun0
9.15.64.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0
0.0.0.0         9.15.64.1       0.0.0.0         UG    0      0        0 eth0

Так, например, дайте вашему интерфейсу wlan метрику 20 и пусть туннельный маршрут придумает метрику ноль. Ваш трафик будет отправлен по туннельному маршруту.

Чтобы настроить метрику на интерфейсе, просто откройте файл интерфейса wlan в каталоге/etc/sysconfig/network-scripts и добавьте параметр METRIC = 20.

Это должно быть сделано. Убедитесь, что после этого проверьте его с помощью команды route -n.

UPDATE:

Теперь, когда у вас есть правильный маршрут по умолчанию, его время для устранения неполадок с помощью tcpdump и pings. Например, выполните приведенную ниже команду и выполните команду ping для удаленной сети.

# tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
09:59:13.591764 IP 192.168.4.190 > 192.168.3.1: ICMP echo request, id 3154, seq 4, length 64
09:59:13.681290 IP 192.168.3.1 > 192.168.4.190: ICMP echo reply, id 3154, seq 4, length 64
09:59:14.592829 IP 192.168.4.190 > 192.168.3.1: ICMP echo request, id 3154, seq 5, length 64
09:59:14.680878 IP 192.168.3.1 > 192.168.4.190: ICMP echo reply, id 3154, seq 5, length 64

Полагаю, вы увидите эхо-запрос, но не эхо-ответ. Это означает, что удаленная конечная точка не направляет пакеты обратно. Необходимо также исправить маршруты в файле конфигурации сервера.

UPDATE2

Из вашего tcpdump ясно, что ваш клиент маршрутизирует пакеты через туннель, поэтому ваша проблема лежит на удаленном конце, потому что он не округляет пакеты обратно.

listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
09:19:28.964361 IP 10.8.0.6.57394 > 192.168.1.1.domain: 60317+ A? daisy.ubuntu.com.localdomain. (46)
09:19:28.964382 IP 10.8.0.6.57394 > 8.8.8.8.domain: 60317+ A? daisy.ubuntu.com.localdomain. (46)
09:19:28.964398 IP 10.8.0.6.57394 > 8.8.4.4.domain: 60317+ A? daisy.ubuntu.com.localdomain. (46)

Необходимо проверить каждый транзитный участок, чтобы увидеть, как выглядит таблица маршрутизации. Начните с 192.168.1.1. Знает ли он, куда направлять пакеты, отправленные в 10.8.0.6?

0
28.01.2020, 01:46

Теги

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