jak ssh do ipv6 ubuntu w sieci LAN?

57

Jestem w stanie pingować moje okno Ubuntu za pomocą polecenia: (gdzie c2h2ttt znajduje się w / etc / hosts)

c2h2@c2h2crawler:~/ttt$ ping6 -I eth1 c2h2ttt
PING c2h2ttt(c2h2ttt) from fe80::21b:21ff:fe22:e865 eth1: 56 data bytes
64 bytes from c2h2ttt: icmp_seq=1 ttl=64 time=10.3 ms
64 bytes from c2h2ttt: icmp_seq=2 ttl=64 time=2.06 ms
64 bytes from c2h2ttt: icmp_seq=3 ttl=64 time=1.33 ms

A kiedy próbuję ssh -6 c2h2ttt, pokazuje:

c2h2@c2h2crawler:~/ttt$ ssh -6 c2h2ttt
ssh: connect to host c2h2ttt port 22: Invalid argument

Jakie jest prawidłowe polecenie?


Po stronie serwera / etc / ssh / sshd_config ma:

ListenAddress ::
ListenAddress 0.0.0.0

Byłem w stanie ssh do c2h2ttt przez ipv4 na porcie 22. i netstat -lnt | grep :22jest

root@c2h2think:~# netstat -lnt | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

ufw jest używany i pozwala na dowolny ruch przychodzący na porcie 22

root@c2h2think:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere

I konfiguracja iptables:

root@c2h2think:~# ip6tables -L -v -n
Chain INPUT (policy DROP 55 packets, 10758 bytes)
pkts bytes target     prot opt in     out     source               destination 
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0        

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
    0     0 ACCEPT     all      *      lo      ::/0                 ::/0  
c2h2
źródło
Może być konieczne zmodyfikowanie pliku sshd.conf i / lub zrestartowanie sshd, aby zdał sobie sprawę, że są nowe adresy v6 do słuchania.
Sprawdź, co mówi netstat -lnt | grep :22(otwarte nasłuchiwanie numeryczne gniazda TCP | zawierające: 22).
ephemient
Ty zrobił otwarty port 22 z ip6tables ... prawda?
Ignacio Vazquez-Abrams
Jedną sekundę sprawdzam ip6tables
c2h2 24.01.11

Odpowiedzi:

89

Spróbuj określić interfejs klienta ssh. Narzędzie ping6 pozwala określić interfejs, jednak ssh nie ma do tego przełącznika, musisz użyć tej składni:

ssh -6 fe80 :: 21b: 21ff: fe22: e865% eth1
John T.
źródło
2
wow, to działa dzięki! tylko dlatego, że problem eth1
c2h2
2
próbowałem tego, działało też dla mnie! Dlaczego trzeba określić interfejs?
Max Beikirch
9
@MaxBeikirch, ponieważ KAŻDY w pełni działający interfejs sieciowy będzie miał adres fe80:. Tak więc system nie wie, do którego interfejsu wysłać ruch. Jest to problem z routingiem ruchu. W przypadku innych adresów system często dokonuje inteligentnych wyborów, ponieważ komputer przypisuje trasy do „pobliskich” adresów (co oznacza adresy w tej samej podsieci), ale to nie działa z fe80: ponieważ wszystkie interfejsy sieciowe są częścią tej samej podsieci.
TOOGAM
1
@TOOGAM Jak mogę określić Postfiks interfejsu dla hosta w ~/.ssh/config?
PVitt,
@PVitt: Zwykłym sposobem jest określenie identyfikatora systemu (takiego jak adres IP), a następnie dodanie znaku procentu, a następnie nazwy interfejsu, jak pokazano w odpowiedzi, która wskazała% eth1 do końca IPv6 adres. eth1 był identyfikatorem interfejsu. Jeśli to nie zadziała, sprawdź [stronę podręcznika dla pliku OpenSSH o nazwie config] (man.openbsd.org/cgi-bin/man.cgi?query=ssh_config&sektion=5), a jeśli to nie pomoże, rozważ utworzenie nowe pytanie (w sprawie SuperUser) z bardziej szczegółowymi szczegółami, abyśmy mogli Ci pomóc dalej.
TOOGAM
8

Łącza lokalne adresy nie powinny być używane do SSH, służą do ładowania protokołu za pomocą protokołu niskiego poziomu. Jeśli nie masz prefiksu dostarczonego przez dostawcę usług internetowych do użycia w sieci, wygeneruj zamiast tego prefiks lokalny unikalny z fd00 :: / 8:

http://en.wikipedia.org/wiki/Unique_local_address

Paweł
źródło
// Jak uzyskać dostęp do adresu IPV6, który można routować w globalnym Internecie IPv6?
Nathan Basanese
@NathanBasanese: Twój dostawca usług internetowych musi zapewnić Ci usługę IPv6 lub założysz tunel z jednym z brokerów IPv6, takich jak Hurricane Electric
Radu C
3
Połącz adresy lokalne to adresy sieciowe. Jeśli chcesz ich użyć do SSH, śmiało. Po prostu wiedz, jak poradzić sobie z dowolnymi komplikacjami, na przykład o tym, co omawiają to pytanie i odpowiedź Johna T. Miałem przypadek, w którym ULA (fd00 :: / 8) nie został przypisany zgodnie z oczekiwaniami. W takim przypadku SSH za pomocą link-local (fe80 :: / 16) działało świetnie. Unikam link-local tylko z powodu kłopotów związanych z routingiem (konieczność określenia interfejsu), ale nie dlatego, że adresy są technicznie mniej zdolne do wysyłania lub odbierania ruchu.
TOOGAM
2

Aby połączyć SSH IPv6, najczęściej masz połączenie IPv6 ISP na swoim komputerze, a następnie spróbuj.

root@hostname[~]# ssh -6 2205:f200:40:401::9ab4:8b43

i to polecenie poprosi po raz pierwszy o potwierdzenie klucza SSH. niż typY/Yes

Uwaga: 2205:f200:40:401::9ab4:8b43oznacza Twój IPv6. To jedyny przykład IPv6, więc nie zapomnij zastąpić cię IPv6.

Shiv Singh
źródło