Не удается подключиться к серверу redis, работающему в другом пространстве имен сети

#redis #network-programming #tcpdump

#redis #сетевое программирование #tcpdump

Вопрос:

Настройка:

  • создано сетевое пространство имен.
  • создана veth пара vetha и vethb с vethb end в пространстве имен и other в хосте.
  • добавлен IP 192.168.122.50 -адрес в vethb
  • Запущен redis сервер в контейнере в этом пространстве имен сети

Отправка запросов на redis сервер непосредственно от клиента, работающего на том же хосте с именем as secondaryvm . Однако он выдает : Failed to connect to Redis: Connection timed out ошибка. Не могу понять, почему это происходит, поэтому посмотрел tcpdump stream, прослушав vetha , то же самое опубликовано ниже:

 21:48:33.764967 IP (tos 0x0, ttl 64, id 31361, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34540 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xe169), seq 3863373484, win 64240, options [mss 1460,sackOK,TS val 3417390465 ecr 0,nop,wscale 7], length 0
21:48:38.884975 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.122.50 tell secondaryvm, length 28
21:48:38.885101 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.122.50 is-at 1a:8c:7f:8b:4d:e0 (oui Unknown), length 28
21:49:16.138726 IP (tos 0x0, ttl 64, id 29195, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xe563), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417432839 ecr 0,nop,wscale 7], length 0
21:49:17.156952 IP (tos 0x0, ttl 64, id 29196, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xe169), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417433857 ecr 0,nop,wscale 7], length 0
21:49:19.173031 IP (tos 0x0, ttl 64, id 29197, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xd989), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417435873 ecr 0,nop,wscale 7], length 0
21:49:22.405182 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.122.50 tell secondaryvm, length 28
21:49:22.405262 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.122.50 is-at 1a:8c:7f:8b:4d:e0 (oui Unknown), length 28
21:49:23.429054 IP (tos 0x0, ttl 64, id 29198, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xc8e9), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417440129 ecr 0,nop,wscale 7], length 0
21:49:31.621030 IP (tos 0x0, ttl 64, id 29199, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xa8e9), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417448321 ecr 0,nop,wscale 7], length 0
21:49:47.749024 IP (tos 0x0, ttl 64, id 29200, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0x69e9), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417464449 ecr 0,nop,wscale 7], length 0
21:50:20.261084 IP (tos 0x0, ttl 64, id 29201, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xeae8), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417496961 ecr 0,nop,wscale 7], length 0
21:50:25.381045 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.122.50 tell secondaryvm, length 28
21:50:25.381176 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.122.50 is-at 1a:8c:7f:8b:4d:e0 (oui Unknown), length 28
 

Сервер Redis запущен, и клиент подключается к нему в соответствии с terminal выводом, но не в соответствии с tcpdump выводом. согласно tcpdump выводам, клиент пытается подключиться, но не удалось успешно установить соединение.

Вывод терминала на стороне клиента:

 ========================100==================================================
terminate called after throwing an instance of 'sw::redis::TimeoutError'
  what():  Failed to connect to Redis: Connection timed out
Aborted (core dumped)
 

Код клиента (написанный на redis-plus-plus):

 int main(){
    auto redis = Redis("tcp://192.168.122.50:6379);
    sleep(5);
    int ep = 100;

    while(true){
    cout<<"===================="<<ep<<"======================n";

    auto pipe = redis.pipeline(false);
    for(int i=1; i<=500; i  ){
        string s = to_string(i);

        if(i%2 == 1){
           pipe.set(s, s);
        }
        else {
           string st = to_string(i-1);
           pipe.get(st);
        }
    }

    auto pipe_replies = pipe.exec();
    pipe.discard();


   }
 

Согласно выводам терминала, он успешно установил соединение.

Не могу понять, что здесь происходит.

  1. Похоже ли, что line auto redis = Redis("tcp://192.168.122.50:6379"); не устанавливает соединение?
  2. redis-сервер, безусловно, запущен, тогда почему соединение не устанавливается при просмотре потока tcp?

Версия Redis 6.0.9 , и ОНА запущена на порту 6379.

Как предотвратить эту ошибку?

Редактировать:

Я выполнил следующие шаги / команды для настройки сетевого пространства имен:

 #!/bin/bash
sudo ip netns ls
sudo ip netns add alpine_network
sudo ip link add name veth-host type veth peer name veth-alpine
sudo ip link set veth-alpine netns alpine_network
sudo ip netns exec alpine_network ip addr add 192.168.122.50/24 dev veth-alpine
sudo ip netns exec alpine_network ip link set veth-alpine up
sudo ip netns exec alpine_network ip link set lo up
sudo ip link set veth-host up
sudo ip route add 192.168.122.50/32 dev veth-host
sudo ip netns exec alpine_network ip route add default via 192.168.122.50 dev veth-alpine
 

Комментарии:

1. Какой IP-адрес и подсеть vetha и какая подсеть vethb?

2. @LiamKelly Как это увидеть? Я добавил точные шаги, которые я выполнил для настройки сетевого пространства имен в разделе РЕДАКТИРОВАНИЯ. Пожалуйста, посмотрите на это.

3. Клиент и сервер Redis находятся на одном хосте.