iptables управляет для lxd контейнера через ssh

Добрый день. Я использую человечность 18 и хочу подключение к моему контейнеру через ssh. Это - мой контейнер

cont    | RUNNING | 10.78.195.190 (eth0) | fd42:4be2:f986:212a:216:3eff:fee4:582 (eth0)  | PERSISTENT | 0         |

Это - основной ip 123.123.123.123

Это - правило

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23 -j DNAT --to-destination 10.78.195.190:22

/# iptables -L -n -t nat

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:23 to:10.78.195.190:22

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  10.78.195.0/24      !10.78.195.0/24       /* generated for LXD network lxdbr0 */

/# ifconfig
    enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.49  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::b62e:99ff:fec2:6c20  prefixlen 64  scopeid 0x20<link>
    ether b4:2e:99:c2:6c:20  txqueuelen 1000  (Ethernet)
    RX packets 7110  bytes 963405 (963.4 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 3102  bytes 585809 (585.8 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 138  bytes 11996 (11.9 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 138  bytes 11996 (11.9 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    lxdbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.78.195.1  netmask 255.255.255.0  broadcast 0.0.0.0
    inet6 fd42:4be2:f986:212a::1  prefixlen 64  scopeid 0x0<global>
    inet6 fe80::781c:22ff:fecf:a246  prefixlen 64  scopeid 0x20<link>
    ether fe:1d:37:ad:03:47  txqueuelen 1000  (Ethernet)
    RX packets 93  bytes 9937 (9.9 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 138  bytes 16179 (16.1 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    vethQLQTSD: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet6 fe80::fc26:27ff:fea1:806a  prefixlen 64  scopeid 0x20<link>
    ether fe:26:27:a1:80:6a  txqueuelen 1000  (Ethernet)
    RX packets 30  bytes 2946 (2.9 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 60  bytes 6593 (6.5 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    vethTE803A: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet6 fe80::fc1d:37ff:fead:347  prefixlen 64  scopeid 0x20<link>
    ether fe:1d:37:ad:03:47  txqueuelen 1000  (Ethernet)
    RX packets 63  bytes 8293 (8.2 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 81  bytes 9622 (9.6 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Если я использую ssh от своей основной системы ssh ubuntu@10.78.195.190, я вхожу в контейнер. Но от другого ssh ubuntu@123.123.123.123 -p 23 не входят, тайм-аут соединения. Какова моя проблема?Спасибо!

0
задан 17 March 2020 в 21:53

1 ответ

Вместо использования iptables, Я предлагаю использовать промежуточное устройство LXD. Такое промежуточное устройство передало бы входящие соединения с хостом в указанном IP-адресе к корректному IP-адресу в контейнере.

Для Вашего случая команда для создания промежуточного устройства следующие.

lxc config device add mycontainer myport2222 proxy listen=tcp:0.0.0.0:2222 connect=tcp:127.0.0.1:22

Мы создали

  1. промежуточное устройство для контейнера mycontainer
  2. с именем myport2222
  3. это - промежуточное устройство
  4. это слушает на хосте во всех интерфейсах (0.0.0.0) на порте 2222, но можно настроить для слушания определенного интерфейса, если Вы хотите.
  5. это затем подключает к порту 22 из контейнера на петлевом интерфейсе (никакая потребность поместить частный IP-адрес контейнера, поскольку LXD уже знает это).

Я замечаю, что Вы используете порт 23. Этот порт обычно используется для протокола Telnet, и вероятно, что некоторые ISPs блокируют его.

0
ответ дан 7 April 2020 в 23:34

Другие вопросы по тегам:

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