Próbowałem uruchomić serwer, aby wdrożyć moją usługę w chmurze. Większość moich operacji opiera się na kliencie ip. Kiedy korzystałem z programu GoDaddy, skrypt, który zwrócił adres IP klienta, działał dobrze (php, zmienna $ _SERVER). Teraz na moim serwerze zwraca 192.168.1.1 (mój router / bramę). Dlaczego to? Używam Apache, PHP5, Ubuntu Server 12.04 LTS. Doceniam to z góry za pomoc.
apache-2.2
ip
http
Osmium USA
źródło
źródło
1.2.3.4 -Internet-> 192.168.1.1 -Private-> 192.168.1.5
?Odpowiedzi:
Używasz spinki do włosów NAT, która musi przepisać źródłowy adres IP. Jeśli zamierzasz połączyć się z zewnętrznym adresem IP od wewnątrz, źródłowy adres IP zawsze musi być adresem IP bramy. W przeciwnym razie pakiety zwrotne nigdy nie wrócą do komputera źródłowego.
Moja rada jest po prostu tego nie robić. Jeśli chcesz połączyć się z maszyną lokalną, użyj jej lokalnego adresu IP.
Ta odpowiedź wyjaśnia ten sam problem.
Oto, co by się stało, gdybyś nie używał SNAT:
Żądanie pochodzi z komputera z tylko prywatnym adresem IP, więc ma prywatny źródłowy adres IP.
Miejsce docelowe nie jest lokalne, więc żądanie jest wysyłane do bramy.
Brama przepisuje tylko miejsce docelowe (to źle!) I wysyła pakiet do serwera.
Serwer widzi zapytanie z lokalnego adresu IP, więc wysyła odpowiedź na lokalny adres IP.
Komputer lokalny widzi odpowiedź z lokalnego adresu IP na pakiet wysłany na zdalny adres IP i ignoruje odpowiedź.
Spinka do włosów NAT jest formą podwójnego NAT, używającą zarówno SNAT, jak i DNAT. Nie może działać bez SNAT. Odpowiedzi muszą również być NATowane, co oznacza, że źródło musi być NATowane, aby uzyskać odpowiedzi do bramy.
źródło
Sprawdź za pomocą tcpdump, jak wyglądają pakiety docierające do serwera. Być może w bramie został aktywowany SNAT.
Edytuj 1
Odnosi się to do przypadku, gdy dostęp jest spoza sieci lokalnej, więc SNAT jest możliwy, ale nie konieczny.
źródło
18:03:51.124438 IP 192.168.1.1.63981 > 192.168.1.131.80: Flags [.], ack 2156, win 4238, length 0
Oczywiście, że pobiera cały ruch z routera. Gdzie znajdę ustawienie SNAT? Czy różni się od NAT (Potrzebuję tej opcji, aby uzyskać dostęp do Internetu z moich innych komputerów podłączonych do tego routera).iptables -t nat -L -nv
. Potrzebujesz NAT do Internetu. To jest NAT dla sieci LAN. Ta sama technologia, ale obie konfiguracje nie są powiązane. Nie powinno być problemu z dezaktywacją SNAT w sieci LAN bez wpływu na połączenie internetowe.