Ось проблема, яку я намагаюся вирішити. Є сервер ("віддалена система"), на який я можу перейти з мого локального комп'ютера, але ця віддалена система не має підключення до Інтернету. Я хочу надати віддаленій системі доступ до Інтернету через свій локальний комп'ютер за допомогою VPN на базі ssh. Як я це досягну? Я спробував наступне, що, здається, частково працює. Що я маю на увазі під "частковою роботою", це те, що пакети з'єднання (пакети синхронізації) надсилаються на мій локальний комп'ютер, але не вдається встановити з'єднання з Інтернетом. Я використовую tcpdump для зйомки пакетів на локальному комп'ютері. Локальний комп'ютер і віддалена система працюють як центоси 7.
Установка - Примітка: команди нижче виконуються в порядку. Команди user @ remote запускаються на віддаленому сервері, а команди user @ local - на локальному комп'ютері.
[user @ remote ~] шоу ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 область хосту lo valid_lft назавжди віддав перевагу_lft назавжди inet6 :: 1/128 хост діапазону valid_lft назавжди віддав перевагу_lft назавжди 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 посилання / ефір AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 сфера глобальної динамічної eth0 valid_lft 1785sec перевагу_lft 1785сек inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика valid_lft 2591987sec кращий_lft 604787сек inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування valid_lft назавжди віддав перевагу_lft назавжди
[user @ local ~] шоу ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 область хосту lo valid_lft назавжди віддав перевагу_lft назавжди inet6 :: 1/128 хост діапазону valid_lft назавжди віддав перевагу_lft назавжди 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 посилання / ефір AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 сфера глобальної динамічної eth0 valid_lft 1785sec перевагу_lft 1785сек inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика valid_lft 2591987sec кращий_lft 604787сек inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування valid_lft назавжди віддав перевагу_lft назавжди
Створіть інтерфейс tun0 у віддаленій системі.
[user @ remote ~] $ sudo ip tuntap додати настройку tun0 mode [user @ remote ~] шоу ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 область хосту lo valid_lft назавжди віддав перевагу_lft назавжди inet6 :: 1/128 хост діапазону valid_lft назавжди віддав перевагу_lft назавжди 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 посилання / ефір AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 сфера глобальної динамічної eth0 valid_lft 1785sec перевагу_lft 1785сек inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика valid_lft 2591987sec кращий_lft 604787сек inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування valid_lft назавжди віддав перевагу_lft назавжди 3: tun0: mtu 1500 qdisc noop state DOWN qlen 500 посилання / немає
Створіть інтерфейс tun0 в локальній системі.
[user @ local ~] $ sudo ip tuntap додати настройку tun0 mode [user @ local ~] шоу ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 область хосту lo valid_lft назавжди віддав перевагу_lft назавжди inet6 :: 1/128 хост діапазону valid_lft назавжди віддав перевагу_lft назавжди 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 посилання / ефір AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 сфера глобальної динамічної eth0 valid_lft 1785sec перевагу_lft 1785сек inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика valid_lft 2591987sec кращий_lft 604787сек inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування valid_lft назавжди віддав перевагу_lft назавжди 3: tun0: mtu 1500 qdisc noop state DOWN qlen 500 посилання / немає
Призначте ip адресу tun0 та підведіть її:
[user @ local ~] $ sudo ip addr додати 10.0.2.1/30 dev tun0 [user @ local ~] $ sudo ip посилання встановило dev tun0 вгору [user @ local ~] $ ip addr show tun0 3: tun0: mtu 1500 qdisc pfifo_fast state DOWN qlen 500 посилання / немає inet 10.0.2.1/30 global global tun0 valid_lft назавжди віддав перевагу_lft назавжди
[user @ remote ~] $ sudo ip addr додати 10.0.2.2/30 dev tun0 [user @ remote ~] $ sudo ip посилання встановлено dev tun0 up [user @ remote ~] $ ip addr show tun0 3: tun0: mtu 1500 qdisc pfifo_fast state DOWN qlen 500 посилання / немає inet 10.0.2.2/30 global global tun0 valid_lft назавжди віддав перевагу_lft назавжди
Змініть sshd_config на віддаленій та локальній системах, щоб включити тунелювання:
[user @ remote ~] $ sudo grep PermitTunnel / etc / ssh / sshd_config PermitTunnel "точка-точка"
[user @ local ~] $ sudo grep PermitTunnel / etc / ssh / sshd_config PermitTunnel "точка-точка"
Створіть тунель ssh:
[user @ local ~] $ sudo ssh -f -w0: 0 root @ remote true пароль root @ remote: [користувач @ локальний ~] $ ps aux | grep root @ віддалений корінь 1851 0,0 0,0 76112 1348? Ss 23:12 0:00 ssh -f -w0: 0 root @ remote true
Тестуйте ping на обох серверах за допомогою нових ip-адрес:
[user @ local ~] $ ping 10.0.2.2 -c 2 PING 10.0.2.2 (10.0.2.2) 56 (84) байт даних. 64 байти з 10.0.2.2: icmp_seq = 1 ttl = 64 час = 1,68 мс 64 байти з 10.0.2.2: icmp_seq = 2 ttl = 64 час = 0,861 мс --- 10.0.2.2 ping статистика --- Передано 2 пакети, 2 отримані, 0% втрати пакету, час 1002 мс rtt min / avg / max / mdev = 0.861 / 1.274 / 1.688 / 0.415 мс
[user @ remote ~] $ ping 10.0.2.1 -c 2 PING 10.0.2.1 (10.0.2.1) 56 (84) байт даних. 64 байти з 10.0.2.1: icmp_seq = 1 ttl = 64 час = 0,589 мс 64 байти з 10.0.2.1: icmp_seq = 2 ttl = 64 час = 0,889 мс --- 10.0.2.1 ping статистика --- 2 передані пакети, 2 отримані, 0% втрати пакету, час 1000 мс rtt min / avg / max / mdev = 0,589 / 0,739 / 0,889 / 0,150 мс
[user @ remote ~] $ route Таблиця маршрутизації IP ядра Шлюз призначення Генмаска Прапори Метричні посилання Використання Iface шлюз за замовчуванням 0.0.0.0 UG 100 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0 AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [user @ remote ~] $ ip route show за замовчуванням через AAA.BBB.CCC.1 dev eth0 протостатичний показник 100 10.0.2.0/30 dev tun0 proto ядро області зв’язку src 10.0.2.2 AAA.BBB.CCC.0 / 24 dev eth0 proto ядро області зв’язку src AAA.BBB.CCC.31 метричний 100
Отримати ip-адреси google:
[user @ local ~] $ nslookup google.com Сервер: сервер Адреса: сервер №53 Неавторитетна відповідь: Ім'я: google.com Адреса: 173.194.219.101 Ім'я: google.com Адреса: 173.194.219.100 Ім'я: google.com Адреса: 173.194.219.113 Ім'я: google.com Адреса: 173.194.219.102 Ім'я: google.com Адреса: 173.194.219.139 Ім'я: google.com Адреса: 173.194.219.138
ВАЖЛИВО: Я запустив вищезгадану команду в інший час і отримав інший результат. Не припускайте, що ваша відповідь буде такою ж, як і моя для nslookup вище.
Оскільки всі IP-адреси google починаються з 173.194.219, давайте зможе маршрутизувати всі ці ip-адреси через локальний комп'ютер.
[user @ remote ~] $ sudo ip route add 173.194.219.0/24 dev tun0 [user @ remote ~] $ route Таблиця маршрутизації IP ядра Шлюз призначення Генмаска Прапори Метричні посилання Використання Iface шлюз за замовчуванням 0.0.0.0 UG 100 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0 AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 173.194.219.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 [user @ remote ~] $ ip route show за замовчуванням через AAA.BBB.CCC.1 dev eth0 протостатичний показник 100 10.0.2.0/30 dev tun0 proto ядро області зв’язку src 10.0.2.2 AAA.BBB.CCC.0 / 24 dev eth0 proto ядро області зв’язку src AAA.BBB.CCC.31 метричний 100 173.194.219.0/24 dev tun0 область посилання
Увімкнути ip_forwarding:
[user @ local ~] $ grep ip_forward /etc/sysctl.conf net.ipv4.ip_forward = 1 [user @ local ~] перезапуск сервісної мережі $ sudo Перезапуск мережі (через systemctl): [OK]
Налаштування захоплення пакетів на локальному комп'ютері за допомогою tcpdump:
[user @ local ~] $ sudo tcpdump -nn -vv 'порт не 22' -i будь-який tcpdump: прослуховування будь-якого, LINUX_SLL типу Linux (приготовлено для Linux), розмір захоплення 65535 байт
Спроба підключитися до google з віддаленого сервера.
[user @ remote ~] $ openssl s_client -connect google.com:243 socket: Нема маршруту до хоста підключити: errno = 113
Як тільки команда openssl запускається на віддаленому сервері, tcpdump захоплює деякі пакети:
10.0.2.2.52768> 173.194.219.102.443: Прапори [S], cksum 0x8702 (правильний), seq 994650730, win 29200, варіанти [mss 1460, sackOK, TS val 7701438 ecr 0, nop, wscale 7], довжина 0 00: 49: 33,247753 IP (tos 0x0, ttl 64, id 46037, offset 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.48774> 173.194.219.100.443: Прапори [S], cksum 0x47a7 (правильний), seq 2218733674, win 29200, варіанти [mss 1460, sackOK, TS val 7701439 ecr 0, nop, wscale 7], довжина 0 00: 49: 33,247883 IP (tos 0xc0, ttl 64, id 9538, зміщення 0, прапори [немає], протокол ICMP (1), довжина 88) 10.0.2.1> 10.0.2.2: хост ICMP 173.194.219.100 недоступний - адміністратор заборонений, довжина 68 IP (tos 0x0, ttl 63, id 46037, зміщення 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.48774> 173.194.219.100.443: Прапори [S], cksum 0x47a7 (правильний), seq 2218733674, win 29200, варіанти [mss 1460, sackOK, TS val 7701439 ecr 0, nop, wscale 7], довжина 0 00: 49: 33,253068 IP (tos 0x0, ttl 64, id 26282, offset 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.51312> 173.194.219.101.443: Прапори [S], cksum 0x6ff8 (правильний), seq 2634016105, win 29200, варіанти [mss 1460, sackOK, TS val 7701443 ecr 0, nop, wscale 7], довжина 0 00: 49: 33,254771 IP (tos 0xc0, ttl 64, id 9539, offset 0, прапори [немає], протокол ICMP (1), довжина 88) 10.0.2.1> 10.0.2.2: хост ICMP 173.194.219.101 недоступний - адміністратор заборонений, довжина 68 IP (tos 0x0, ttl 63, id 26282, зміщення 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.51312> 173.194.219.101.443: Прапори [S], cksum 0x6ff8 (правильний), seq 2634016105, win 29200, варіанти [mss 1460, sackOK, TS val 7701443 ecr 0, nop, wscale 7], довжина 0 00: 49: 33,258805 IP (tos 0x0, ttl 64, id 9293, offset 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.33686> 173.194.219.139.443: Прапори [S], cksum 0x542b (правильний), seq 995927943, win 29200, варіанти [mss 1460, sackOK, TS val 7701450 ecr 0, nop, wscale 7], довжина 0 00: 49: 33,258845 IP (tos 0xc0, ttl 64, id 9540, зміщення 0, прапори [немає], протокол ICMP (1), довжина 88) 10.0.2.1> 10.0.2.2: хост ICMP 173.194.219.139 недоступний - адміністратор заборонений, довжина 68 IP (tos 0x0, ttl 63, id 9293, зміщення 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.33686> 173.194.219.139.443: Прапори [S], cksum 0x542b (правильний), seq 995927943, win 29200, варіанти [mss 1460, sackOK, TS val 7701450 ecr 0, nop, wscale 7], довжина 0 ^ С 13 захоплених пакетів 13 пакетів, отриманих фільтром 0 пакетів, скинутих ядром
Пакети, захоплені за допомогою tcpdump, передбачають, що робиться спроба встановити з'єднання (пакети синхронізації надсилаються), але нічого не отримано. Також є повідомлення, 10.0.2.1 > 10.0.2.2: ICMP host 173.194.219.139 unreachable - admin prohibited, length 68
яке, здається, говорить про проблему.
Будь-які пропозиції щодо вирішення цього питання? Чи є правила iptable, які потрібно додати? Будь-які проблеми з брандмауером (firewall-d?).
Примітка №1
Вихід із iptables-save:
[user @ local ~] $ sudo iptables -t nat -A РОЗМІСТЕННЯ -s 10.0.2.2/32! -d 10.0.2.1/30 -j MASQUERADE -o eth0 [user @ local ~] $ sudo iptables-save # Створено iptables-save v1.4.21 в сб 15 квітня 01:40:57 2017 * фіз : ПЕРЕДАЧА ПРИЙМАННЯ [35: 8926] : ВХОДНІ ПРИХОДИ [1:84] : ВИХІД ПРИЙМАНО [6: 439] : ПІДГОТОВКА ПРИЙМАННЯ [6: 439] : OUTPUT_direct - [0: 0] : POSTROUTING_ZONES - [0: 0] : POSTROUTING_ZONES_SOURCE - [0: 0] : POSTROUTING_direct - [0: 0] : POST_public - [0: 0] : POST_public_allow - [0: 0] : POST_public_deny - [0: 0] : POST_public_log - [0: 0] : PREROUTING_ZONES - [0: 0] : PREROUTING_ZONES_SOURCE - [0: 0] : PREROUTING_direct - [0: 0] : PRE_public - [0: 0] : PRE_public_allow - [0: 0] : PRE_public_deny - [0: 0] : PRE_public_log - [0: 0] -A ПЕРЕДАЧА -j PREROUTING_direct -A ПЕРЕДАЧА -j PREROUTING_ZONES_SOURCE -A ПЕРЕВІРКА -j PREROUTING_ZONES -A OUTPUT -j OUTPUT_direct -A POSTROUTING -j POSTROUTING_direct -A POSTROUTING -j POSTROUTING_ZONES_SOURCE -A ПОСТРОЮВАННЯ -j POSTROUTING_ZONES -А РОЗМІСТЕННЯ -s 10.0.2.2/32! -d 10.0.2.0/30 -j МАСКЕРАД -A POSTROUTING_ZONES -o eth0 -g POST_public -A POSTROUTING_ZONES -g POST_public -A POST_public -j POST_public_log -A POST_public -j POST_public_deny -A POST_public -j POST_public_allow -A PREROUTING_ZONES -i eth0 -g PRE_public -A PREROUTING_ZONES -g PRE_public -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow КОМІТЕТ # Завершено сб 15 квітня 01:40:57 2017 # Створено iptables-save v1.4.21 в сб 15 квітня 01:40:57 2017 * манлі : ПЕРЕДАЧА ПРИЙМАННЯ [169: 18687] : ВХОДНІ ПРИЙМИ [144: 11583] : Вперед, прийняти [0: 0] : ВИХІД ПРИЙМАНО [80: 8149] : ПІДГОТОВКА ПРИЙМАННЯ [80: 8149] : FORWARD_direct - [0: 0] : INPUT_direct - [0: 0] : OUTPUT_direct - [0: 0] : POSTROUTING_direct - [0: 0] : PREROUTING_ZONES - [0: 0] : PREROUTING_ZONES_SOURCE - [0: 0] : PREROUTING_direct - [0: 0] : PRE_public - [0: 0] : PRE_public_allow - [0: 0] : PRE_public_deny - [0: 0] : PRE_public_log - [0: 0] -A ПЕРЕДАЧА -j PREROUTING_direct -A ПЕРЕДАЧА -j PREROUTING_ZONES_SOURCE -A ПЕРЕВІРКА -j PREROUTING_ZONES -A INPUT -j INPUT_direct -А Вперед, -j FORWARD_direct -A OUTPUT -j OUTPUT_direct -A POSTROUTING -j POSTROUTING_direct -A PREROUTING_ZONES -i eth0 -g PRE_public -A PREROUTING_ZONES -g PRE_public -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow КОМІТЕТ # Завершено сб 15 квітня 01:40:57 2017 # Створено iptables-save v1.4.21 в сб 15 квітня 01:40:57 2017 * безпека : ВХОДНІ ПРИХОДИ [2197: 163931] : Вперед, прийняти [0: 0] : ВИХІД ПРИЙМАНО [1229: 185742] : FORWARD_direct - [0: 0] : INPUT_direct - [0: 0] : OUTPUT_direct - [0: 0] -A INPUT -j INPUT_direct -А Вперед, -j FORWARD_direct -A OUTPUT -j OUTPUT_direct КОМІТЕТ # Завершено сб 15 квітня 01:40:57 2017 # Створено iptables-save v1.4.21 в сб 15 квітня 01:40:57 2017 * сирий : ПЕРЕДАЧА ПРИЙМАННЯ [2362: 184437] : ВИХІД ПРИЙМАНО [1229: 185742] : OUTPUT_direct - [0: 0] : PREROUTING_direct - [0: 0] -A ПЕРЕДАЧА -j PREROUTING_direct -A OUTPUT -j OUTPUT_direct КОМІТЕТ # Завершено сб 15 квітня 01:40:57 2017 # Створено iptables-save v1.4.21 в сб 15 квітня 01:40:57 2017 * фільтр : ВХОДНІ ПРИХОДИ [0: 0] : Вперед, прийняти [0: 0] : ВИХІД ПРИЙМАНО [80: 8149] : FORWARD_IN_ZONES - [0: 0] : FORWARD_IN_ZONES_SOURCE - [0: 0] : FORWARD_OUT_ZONES - [0: 0] : FORWARD_OUT_ZONES_SOURCE - [0: 0] : FORWARD_direct - [0: 0] : FWDI_public - [0: 0] : FWDI_public_allow - [0: 0] : FWDI_public_deny - [0: 0] : FWDI_public_log - [0: 0] : FWDO_public - [0: 0] : FWDO_public_allow - [0: 0] : FWDO_public_deny - [0: 0] : FWDO_public_log - [0: 0] : INPUT_ZONES - [0: 0] : INPUT_ZONES_SOURCE - [0: 0] : INPUT_direct - [0: 0] : IN_public - [0: 0] : IN_public_allow - [0: 0] : IN_public_deny - [0: 0] : IN_public_log - [0: 0] : OUTPUT_direct - [0: 0] -A INPUT -m conntrack - держава, ЗВ'ЯЗАНА, Встановлена -j ACCEPT -A ВХОД -i lo -j ПРИЙМАНО -A INPUT -j INPUT_direct -A ВХОД -j INPUT_ZONES_SOURCE -A ВХОД -j INPUT_ZONES -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -j REJECT - відхилити-з icmp-хостом-заборонено -ПЕРЕДАЙМИ -М континук - держава, ЗВ'ЯЗАНА, Встановлена -j ПРИЙМАНО -А ВПЕРЕД, -i ось -J ПРИЙМАНО -А Вперед, -j FORWARD_direct -А Вперед, -j FORWARD_IN_ZONES_SOURCE -А Вперед, -j FORWARD_IN_ZONES -А Вперед, -j FORWARD_OUT_ZONES_SOURCE -А Вперед, -j FORWARD_OUT_ZONES -А ВПЕРЕД, -м контракція - держава ІНВАЛІД -j ДРОП -А ВПЕРЕД, -j REJECT - відхилити-з icmp-хостом-заборонено -A OUTPUT -j OUTPUT_direct -A FORWARD_IN_ZONES -i eth0 -g FWDI_public -A FORWARD_IN_ZONES -g FWDI_public -A FORWARD_OUT_ZONES -o eth0 -g FWDO_public -A FORWARD_OUT_ZONES -g FWDO_public -A FWDI_public -j FWDI_public_log -A FWDI_public -j FWDI_public_deny -A FWDI_public -j FWDI_public_allow -A FWDI_public -p icmp -j ACCEPT -A FWDO_public -j FWDO_public_log -A FWDO_public -j FWDO_public_deny -A FWDO_public -j FWDO_public_allow -A INPUT_ZONES -i eth0 -g IN_public -A INPUT_ZONES -g IN_public -A IN_public -j IN_public_log -A IN_public -j IN_public_deny -A IN_public -j IN_public_allow -A IN_public -p icmp -j ACCEPT -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT КОМІТЕТ # Завершено сб 15 квітня 01:40:57 2017
Примітка № 2:
Я встановлюю веб-сервер apache на окремий хост, до якого має доступ лише локальний сервер. Я запустив tcpdump на прослуховування веб-сервера на порту 80. Під час запуску
telnet webserver 80
я захоплю наступні пакети. Така очікувана поведінка, оскільки встановлено TCP-з'єднання (S, S-Ack, Ack).
[user @ webserver ~] Порт sudo tcpdump -nn -vv 'не 22, а 80' -i eth0 tcpdump: прослуховування на eth0, тип посилання EN10MB (Ethernet), розмір захоплення 65535 байт 07: 17: 30.411474 IP (tos 0x10, ttl 64, id 34376, зміщення 0, прапори [DF], протокол TCP (6), довжина 60) local.server.46710> web.server.80: Прапори [S], cksum 0x8412 (неправильно -> 0x6d96), seq 3018586542, win 29200, параметри [mss 1460, sackOK, TS val 3047398 ecr 0, nop, wscale 7] , довжина 0 07: 17: 30,411557 IP (tos 0x0, ttl 64, id 0, offset 0, прапори [DF], протокол TCP (6), довжина 60) web.server.80> local.server.46710: Прапори [S.], cksum 0x8412 (неправильно -> 0x9114), seq 2651711943, ack 3018586543, win 28960, параметри [mss 1460, sackOK, TS val 37704524 ecr 3047398, nop , wscale 7], довжина 0 07: 17: 30.411725 IP (tos 0x10, ttl 64, id 34377, зміщення 0, прапори [DF], протокол TCP (6), довжина 52) local.server.46710> web.server.80: Прапори [.], cksum 0x840a (неправильно -> 0x301c), seq 1, ack 1, win 229, параметри [nop, nop, TS val 3047398 ecr 37704524], довжина 0
Коли я намагаюся підключитися до веб-сервера з віддаленого сервера через локальний сервер, tcpdump на веб-сервері не захоплює жодних пакетів (навіть початкової Sync), але локальний сервер захоплює пакет Sync, що надсилається на веб-сервер (див. Нижче). Це змушує мене вважати, що щось заважає пакетам надсилатися на веб-сервер - можливо, неправильна конфігурація або брандмауер.
[user @ local ~] Порт $ sudo tcpdump -nn -vv 'не 22, а 80' -i будь-який tcpdump: прослуховування будь-якого, LINUX_SLL типу Linux (приготовлено для Linux), розмір захоплення 65535 байт 02: 24: 09.135842 IP (tos 0x10, ttl 64, id 38062, offset 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.50558> web.server.80: Прапори [S], cksum 0x668d (правильний), seq 69756226, win 29200, параметри [mss 1460, sackOK, TS val 4780524 ecr 0, nop, wscale 7], довжина 0
ВАЖЛИВО: пакети не маршрутизуються через eth0, а натомість робиться спроба відправки пакетів на веб-сервер через tun0 (що не вдається). Я можу підтвердити це, запустивши tcpdump в інтерфейсі tun0:
[user @ local ~] Порт $ sudo tcpdump -nn -vv 'не 22, а 80' -i tun0 tcpdump: прослуховування на tun0, RAW типу посилання (Raw IP), розмір захоплення 65535 байт 02: 28: 10,295972 IP (tos 0x10, ttl 64, id 46976, зміщення 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.50560> webserver.80: Прапори [S], cksum 0xd560 (правильний), seq 605366388, win 29200, параметри [mss 1460, sackOK, TS val 5021684 ecr 0, nop, wscale 7], довжина 0
Примітка №3:
Я вимкнув firewalld на локальному комп'ютері, і веб-сервер отримав пакети синхронізації.
[user @ local ~] $ sudo systemctl зупинити firewalld
[user @ webserver ~] Порт sudo tcpdump -nn -vv 'не 22, а 80' -i eth0 tcpdump: прослуховування на eth0, тип посилання EN10MB (Ethernet), розмір захоплення 65535 байт 08: 25: 17.390912 IP (tos 0x10, ttl 63, id 61767, offset 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.50580> web.server.80: Прапори [S], cksum 0x30dc (правильний), seq 2601927549, win 29200, параметри [mss 1460, sackOK, TS val 7123514 ecr 0, nop, wscale 7], довжина 0 08: 25: 17,391003 IP (tos 0x0, ttl 64, id 0, offset 0, прапори [DF], протокол TCP (6), довжина 60) web.server.80> 10.0.2.2.50580: Прапори [S.], cksum 0x4e23 (неправильно -> 0xa316), seq 959115533, ack 2601927550, win 28960, варіанти [mss 1460, sackOK, TS val 41771503 ecr 7123514, nop , wscale 7], довжина 0 08: 25: 17.391192 IP (tos 0x0, ttl 128, id 60032, offset 0, прапори [немає], протокол TCP (6), довжина 40) 10.0.2.2.50580> web.server.80: Прапори [R], cksum 0x7339 (правильно), seq 2601927550, win 8192, довжина 0 08: 25: 18,393794 IP (tos 0x10, ttl 63, id 61768, offset 0, прапори [DF], протокол TCP (6), довжина 60) 10.0.2.2.50580> web.server.80: Прапори [S], cksum 0x2cf1 (правильний), seq 2601927549, win 29200, варіанти [mss 1460, sackOK, TS val 7124517 ecr 0, nop, wscale 7], довжина 0 08: 25: 18,393898 IP (tos 0x0, ttl 64, id 0, offset 0, прапори [DF], протокол TCP (6), довжина 60) web.server.80> 10.0.2.2.50580: Прапори [S.], cksum 0x4e23 (неправильно -> 0x7e71), seq 974785773, ack 2601927550, win 28960, варіанти [mss 1460, sackOK, TS val 41772506 ecr 7124517, nop , wscale 7], довжина 0 08: 25: 18,394003 IP (tos 0x0, ttl 128, id 60033, offset 0, прапори [немає], протокол TCP (6), довжина 40) 10.0.2.2.50580> web.server.80: Прапори [R], cksum 0x566a (правильний), seq 2601927550, win 8192, довжина 0
Тепер ясно, що IP-код джерела потрібно оновити, щоб він відповідав ip-адресу локального сервера, перш ніж пакет буде надісланий веб-серверу. Як @xin запропонував, NAT потрібно встановити на локальному сервері.
Примітка №4:
Щойно я намагаюся підключитися до веб-сервера, я можу побачити, що число pkts для правила 9 збільшується на 1 (як показано нижче).
[user @ local ~] $ sudo iptables -nvL - рядки .......... Ланцюг Вперед (політика ACCEPT 0 пакетів, 0 байт) num pkts bytes target prot відключити вихідне місце призначення 1 0 0 ПРИЙМАТИ все - * * 0.0.0.0/0 0.0.0.0/0 ctstate ЗВ'ЯЗАНО, Встановлено 2 0 0 ПРИЙМАТИ все - lo * 0.0.0.0/0 0.0.0.0/0 3 1 60 FORWARD_direct all - * * 0.0.0.0/0 0.0.0.0/0 4 1 60 FORWARD_IN_ZONES_SOURCE всі - * * 0.0.0.0/0 0.0.0.0/0 5 1 60 FORWARD_IN_ZONES всі - * * 0.0.0.0/0 0.0.0.0/0 6 1 60 FORWARD_OUT_ZONES_SOURCE всі - * * 0.0.0.0/0 0.0.0.0/0 7 1 60 FORWARD_OUT_ZONES всі - * * 0.0.0.0/0 0.0.0.0/0 8 0 0 DROP all - * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID 9 1 60 REJECT all - * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-хост-заборонено .......... [user @ local ~] $ sudo iptables -D ВПЕРЕД 9
Після того, як правило 9 із ланцюга FORWARD буде видалено (зверху, як запропонував @xin), я можу підключитися до веб-сервера.
[user @ local ~] $ sudo iptables -nvL - рядки .......... Ланцюг Вперед (політика ACCEPT 1 пакетів, 60 байт) num pkts bytes target prot відключити вихідне місце призначення 1 12 5857 ПРИЙМАТИ все - * * 0.0.0.0/0 0.0.0.0/0 ctstate ЗВ'ЯЗАНО, Встановлено 2 0 0 ПРИЙМАТИ все - lo * 0.0.0.0/0 0.0.0.0/0 3 2 120 FORWARD_direct all - * * 0.0.0.0/0 0.0.0.0/0 4 2 120 FORWARD_IN_ZONES_SOURCE всі - * * 0.0.0.0/0 0.0.0.0/0 5 2 120 FORWARD_IN_ZONES всі - * * 0.0.0.0/0 0.0.0.0/0 6 2 120 FORWARD_OUT_ZONES_SOURCE всі - * * 0.0.0.0/0 0.0.0.0/0 7 2 120 FORWARD_OUT_ZONES всі - * * 0.0.0.0/0 0.0.0.0/0 8 0 0 DROP all - * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID ..........