Wprowadzenie: co osiągniesz w rezultacie

Jeśli pracujesz z mobilnymi proxy na Macu, prędzej czy później trafiasz na tę samą sytuację. Wpisujesz adres i port w ustawieniach Wi-Fi, strona pokazuje nowy IP, cieszysz się. A potem okazuje się, że Terminal pobiera pakiety bezpośrednio, git łączy się po starym adresie, a połowa aplikacji w ogóle nie zauważyła zmian. Ten przewodnik rozwiązuje problem w całości.

Po przeczytaniu i wykonaniu wszystkich kroków uzyskasz skonfigurowane proxy na macOS, które działa na trzech poziomach jednocześnie:

  • Na poziomie systemu: Safari, Chrome, poczta, komunikatory i inne programy, które respektują ustawienia systemowe.
  • Na poziomie Terminala: polecenia networksetup do włączania, wyłączania i przełączania proxy bez jednego kliknięcia myszą.
  • Na poziomie narzędzi deweloperskich: curl, git, Homebrew, pip, npm i inne narzędzia, które czytają zmienne środowiskowe, a nie ustawienia systemowe.

Osobno omówimy listę wyjątków. To właśnie to pole, przez które część ruchu omija proxy, choć niczego specjalnie nie konfigurowałeś. Zrozumiesz, jak jest zbudowane, co do niego dodawać, co z niego usuwać i jak sprawdzić, że żadne zapytanie nie przechodzi bezpośrednio tam, gdzie nie powinno.

Dla kogo jest ten przewodnik

Poradnik jest napisany dla początkujących. Jeśli nigdy nie otwierałeś Terminala, nic się nie stanie: każde polecenie rozbierzemy na litery i wyjaśnimy, co robi. Przewodnik przyda się:

  • marketerom i specjalistom od social mediów, którzy prowadzą kilka projektów z różnych IP;
  • arbitrażystom, którzy muszą szybko przełączać geolokalizację i sprawdzać kreacje;
  • deweloperom, którzy testują aplikacje i API przez mobilne proxy;
  • właścicielom firm, którzy chcą raz zrozumieć temat i nie wzywać specjalisty przy każdej zmianie proxy.

Dla doświadczonych użytkowników na końcu znajduje się blok z zaawansowanymi technikami: lokalizacje sieciowe, pliki PAC, aliasy w powłoce i skrypty automatycznej rotacji.

Co trzeba wiedzieć wcześniej

Nic skomplikowanego. Wystarczy umieć otwierać Ustawienia systemowe i kopiować tekst. Wszystko inne wyjaśniamy po drodze. Nie zajmujemy się ustawieniami konkretnych przeglądarek ani przeglądarek antydetekcyjnych: temu poświęcone są osobne materiały na blogu. Tutaj tylko macOS jako system i jego wbudowane narzędzia.

Ile czasu to zajmie

Podstawowa konfiguracja przez Ustawienia systemowe zajmuje 10 minut. Konfiguracja Terminala i narzędzi deweloperskich kolejne 15-20 minut. Pełna weryfikacja i analiza wyjątków około 10 minut. Razem 30-40 minut, jeśli robisz wszystko spokojnie i z kontrolą.

Przygotowanie wstępne

Zanim cokolwiek zmienisz w systemie, zbierzmy wszystko, co potrzebne. Dobre przygotowanie oszczędza więcej czasu niż jakiekolwiek triki.

Co będzie potrzebne

  • Mac z macOS Ventura 13 lub nowszym. Wszystkie przykłady sprawdzono na macOS Sonoma 14, Sequoia 15 i Tahoe 26. Na starszych wersjach z aplikacją Ustawienia systemowe w formie siatki ikon ścieżka do proxy jest nieco inna, różnicę wskażemy osobno.
  • Dane mobilnego proxy. To adres serwera (domena lub IP), port, login i hasło. Mobilne proxy mają zwykle dwa porty: jeden dla protokołu HTTP, drugi dla SOCKS5. Miej pod ręką oba.
  • Link do zmiany IP, jeśli twój dostawca go udostępnia. Przyda się w sekcji o automatyzacji.
  • Uprawnienia administratora na Macu. Do zmiany systemowego proxy przez Terminal macOS poprosi o hasło użytkownika.
  • Edytor tekstu na notatki. Wystarczy standardowy TextEdit lub Notatki.

Co trzeba sprawdzić przed rozpoczęciem

  1. Upewnij się, że internet działa bez proxy. Otwórz dowolną stronę w Safari. Jeśli się nie otwiera, najpierw rozwiąż problem z siecią, inaczej potem nie będzie wiadomo, co dokładnie się zepsuło.
  2. Sprawdź, przez jaki interfejs jesteś podłączony: Wi-Fi czy kabel Ethernet. Otwórz Ustawienia systemowe, sekcję Sieć. Aktywne połączenie jest oznaczone zieloną kropką i słowem Połączono. Zapisz nazwę: zwykle to Wi-Fi lub Ethernet.
  3. Sprawdź swoje aktualne IP bez proxy. Otwórz w przeglądarce dowolny serwis sprawdzający IP i zapisz adres. Będziemy z nim porównywać wynik.

Kopia zapasowa aktualnych ustawień

Ustawienia proxy w macOS można łatwo przywrócić, ale lepiej zapisać stan początkowy. Zwłaszcza jeśli pracujesz na firmowym Macu, gdzie administrator systemu mógł coś wcześniej skonfigurować.

  1. Otwórz Terminal. Naciśnij Command i spację, wpisz słowo Terminal i naciśnij Enter.
  2. Skopiuj i wklej polecenie, następnie naciśnij Enter:
scutil --proxy > ~/Desktop/proxy_backup.txt

Na Pulpicie pojawi się plik proxy_backup.txt z pełnym opisem aktualnych ustawień proxy. Jeśli coś zepsujesz, zawsze możesz porównać wartości z tym plikiem.

Wskazówka: Od razu utwórz w Notatkach kartę z danymi proxy: host, port HTTP, port SOCKS5, login, hasło, link do rotacji. Będziesz do niej zaglądać dziesiątki razy. Nie przechowuj hasła jawnie w ogólnodostępnych dokumentach.

Podstawowe pojęcia: co trzeba zrozumieć przed rozpoczęciem

Kilka terminów, bez których dalsze kroki zamienią się w magię. Czytanie obowiązkowe, nawet jeśli wydaje się, że to znasz.

Serwer proxy

To pośrednik między twoim Makiem a internetem. Zamiast iść do strony bezpośrednio, twoje zapytanie najpierw trafia na serwer proxy, a stamtąd do strony. Strona widzi adres IP proxy, a nie twój. Mobilne proxy wyróżnia się tym, że jego IP należy do operatora sieci komórkowej, a dla stron wyglądasz jak zwykły użytkownik smartfona.

Proxy HTTP i proxy SOCKS5

To dwa różne sposoby komunikacji z serwerem proxy. Proxy HTTP rozumie ruch internetowy, obsługuje strony i większość aplikacji. W macOS jest podzielone na dwa przełączniki: Proxy sieci web (HTTP) dla zwykłych stron i Bezpieczne proxy sieci web (HTTPS) dla stron z szyfrowaniem. W praktyce w oba pola wpisuje się ten sam adres i port.

Proxy SOCKS5 działa niżej, na poziomie połączeń, i przepuszcza dowolny ruch, nie tylko internetowy. Przydaje się do Terminala, komunikatorów, gier. Ważny niuans macOS: ustawienia systemowe pozwalają podać login i hasło dla SOCKS, ale wiele aplikacji nie obsługuje tej autoryzacji przez systemowy SOCKS. Dlatego w ustawieniach systemowych użyjemy HTTP, a SOCKS5 zostawimy dla Terminala i osobnych programów.

Proxy systemowe

To ustawienia przechowywane w macOS dla konkretnego interfejsu sieciowego. Safari, Chrome, Mail, App Store i większość aplikacji w Swift i Objective-C czytają je automatycznie. Ale nie wszystkie. Programy napisane w Pythonie, Go, Node.js, a także klasyczne narzędzia uniksowe jak curl i git ignorują ustawienia systemowe. One patrzą na zmienne środowiskowe.

Zmienne środowiskowe

To nazwane wartości, które żyją w twojej sesji Terminala. Na przykład zmienna http_proxy mówi narzędziom: cały ruch HTTP wysyłaj tutaj. Zmienne istnieją tylko w otwartym oknie Terminala, jeśli nie zapiszesz ich w pliku konfiguracyjnym powłoki. O tym będzie osobny krok.

Lista wyjątków

W macOS nazywa się Pomiń proxy dla tych hostów i domen. Wszystkie adresy z tej listy system wysyła bezpośrednio, z pominięciem proxy. Domyślnie są tam już wpisy *.local i 169.254/16, odpowiadają za sieć lokalną i nie należy ich usuwać. Problem zaczyna się, gdy na listę trafiają zbędne maski albo gdy oczekujesz, że wyjątki zadziałają w Terminalu. Nie zadziałają: Terminal ma swoją listę, zmienną no_proxy. Wszystko to omówimy.

Usługa sieciowa

Tak macOS nazywa każdy interfejs: Wi-Fi, Ethernet, Thunderbolt Bridge, iPhone USB. Proxy konfiguruje się osobno dla każdej usługi. Jeśli skonfigurowałeś Wi-Fi, a potem podłączyłeś kabel, proxy przestanie działać. To jedna z najczęstszych przyczyn pytania, dlaczego proxy na macOS raz działa, a raz nie.

Krok 1: Sprawdzamy dane proxy przed konfiguracją systemu

Cel etapu: upewnić się, że proxy żyje, a login i hasło są prawidłowe. To oszczędzi pół godziny szukania błędu w ustawieniach, gdy problem był w literówce w haśle.

Sprawdzimy przez curl. To narzędzie jest już w macOS, nic nie trzeba instalować.

  1. Otwórz Terminal, jeśli jeszcze nie jest otwarty.
  2. Weź z karty dane proxy. Dla przykładu użyjemy umownych wartości: host proxy.example.net, port HTTP 10000, port SOCKS5 10001, login user123, hasło pass456. Podstaw swoje prawdziwe dane zamiast tych.
  3. Wpisz polecenie do sprawdzenia portu HTTP i naciśnij Enter:
curl -x http://user123:pass456@proxy.example.net:10000 https://ifconfig.me

Przeanalizujmy, co tu jest napisane. Przełącznik -x informuje curl o adresie proxy. Dalej idzie protokół http, następnie login, dwukropek, hasło, symbol małpy, host, dwukropek, port. Na końcu adres serwisu, który w odpowiedzi zwraca IP, z którego przyszło zapytanie.

  1. Po 1-3 sekundach w Terminalu pojawi się adres IP. To IP twojego mobilnego proxy. Jeśli różni się od tego, które zapisałeś przy przygotowaniu, wszystko działa.
  2. Teraz sprawdź port SOCKS5 tym samym poleceniem, zmieniając protokół i port:
curl -x socks5h://user123:pass456@proxy.example.net:10001 https://ifconfig.me

Zwróć uwagę na literę h w słowie socks5h. Oznacza, że nazwy domen będą rozwiązywane po stronie proxy, a nie na twoim Macu. Dla mobilnych proxy to właściwy wariant: w ten sposób nie zostawiasz zapytań do DNS swojego domowego dostawcy.

Uwaga: Jeśli w haśle są znaki małpy, dwukropka, ukośnika, krzyżyka, znaku zapytania lub procentu, trzeba je zakodować. Małpę zamień na %40, dwukropek na %3A, krzyżyk na %23, znak zapytania na %3F, procent na %25. Inaczej curl nieprawidłowo podzieli ciąg i uzna, że hasło skończyło się za wcześnie.

Możliwe problemy na tym etapie

  • Odpowiedź Received HTTP code 407 from proxy after CONNECT. Proxy odrzuca autoryzację. Sprawdź login i hasło, popatrz na znaki specjalne. Upewnij się, że w panelu klienta dostawcy nie jest włączona autoryzacja po IP zamiast po loginie i haśle.
  • Odpowiedź Failed to connect lub Connection timed out. Nieprawidłowy host lub port, albo proxy jest wyłączone. Sprawdź w panelu klienta. Spróbuj innego portu.
  • Polecenie zawisło bez wyniku. Poczekaj 30 sekund. Sieci mobilne bywają wolne. Jeśli nic się nie stało, naciśnij Control i C, aby przerwać, i sprawdź dane.

Weryfikacja: Oba polecenia curl zwróciły adres IP inny niż twój domowy. Możesz przejść dalej. Jeśli choć jedno nie zadziałało, dalsze kroki nie mają sensu: system użyje tych samych danych.

Krok 2: Konfigurujemy proxy przez Ustawienia systemowe macOS

Cel etapu: zmusić Safari, Chrome i wszystkie aplikacje respektujące systemowe proxy, aby łączyły się z internetem przez twoje mobilne proxy.

Otwieramy właściwy ekran

  1. Kliknij ikonę Apple w lewym górnym rogu ekranu i wybierz Ustawienia systemowe.
  2. W lewej kolumnie kliknij Wi-Fi, jeśli jesteś podłączony bezprzewodowo. Jeśli kablem, kliknij Sieć, następnie Ethernet.
  3. Znajdź nazwę swojej sieci. Po prawej stronie obok niej jest przycisk Szczegóły z trzema kropkami lub napisem. Kliknij go.
  4. Otworzy się okno z parametrami połączenia. W lewej kolumnie tego okna wybierz pozycję Proxy. Znajduje się na samym dole listy, po TCP/IP, DNS i WINS.

Zobaczysz listę przełączników: Automatyczne wykrywanie proxy, Automatyczna konfiguracja proxy, Proxy sieci web (HTTP), Bezpieczne proxy sieci web (HTTPS), Proxy FTP, Proxy SOCKS, Strumieniowe proxy (RTSP), Proxy Gopher. Na dole pole Pomiń proxy dla tych hostów i domen.

Jeśli masz starszy macOS, gdzie Ustawienia systemowe wyglądają jak siatka ikon, ścieżka jest taka: Ustawienia systemowe, Sieć, wybierz interfejs po lewej, przycisk Zaawansowane, zakładka Proxy. Dalej wszystko się zgadza.

Włączamy proxy HTTP

  1. Kliknij przełącznik Proxy sieci web (HTTP). Zmieni kolor na niebieski, a poniżej pojawią się pola do wpisania.
  2. W polu Serwer wpisz host swojego proxy, na przykład proxy.example.net. Bez http://, bez ukośników, tylko host.
  3. W polu Port po prawej wpisz port HTTP, na przykład 10000.
  4. Włącz przełącznik Proxy wymaga hasła.
  5. W polu Nazwa użytkownika wpisz login. W polu Hasło wpisz hasło. Tutaj nie trzeba kodować znaków specjalnych, wpisz je tak, jak są.

Włączamy proxy HTTPS

Większość stron działa dziś po HTTPS, więc ta pozycja jest obowiązkowa. Bez niej zaszyfrowany ruch pójdzie bezpośrednio, a ty będziesz się dziwić, dlaczego jedne strony widzą proxy, a inne twój prawdziwy IP.

  1. Kliknij przełącznik Bezpieczne proxy sieci web (HTTPS).
  2. Wpisz ten sam host i ten sam port, co dla HTTP. Mobilne proxy obsługują oba typy ruchu na jednym porcie.
  3. Włącz Proxy wymaga hasła, wpisz login i hasło ponownie.

O proxy SOCKS i pozostałych przełącznikach

Przełącznik Proxy SOCKS w ustawieniach systemowych zostaw wyłączony, jeśli masz włączone HTTP i HTTPS. Powód jest taki, że przy włączonym systemowym SOCKS niektóre aplikacje zaczynają go preferować, a autoryzację przez systemowy SOCKS obsługują nie wszystkie. Efekt: część programów traci dostęp do sieci. FTP, RTSP i Gopher nie ruszaj, to przestarzałe protokoły. Automatyczne wykrywanie i Automatyczną konfigurację też zostaw wyłączone, inaczej mogą nadpisać twoje ręczne wartości.

Zapisujemy

  1. Kliknij przycisk OK w prawym dolnym rogu okna.
  2. Jeśli system poprosi o hasło twojego użytkownika Mac, wpisz je. To normalne: zmiana ustawień sieciowych wymaga uprawnień administratora.
  3. Całkowicie zamknij Safari lub Chrome i otwórz je ponownie. Przeglądarki buforują ustawienia proxy przy starcie.

Wskazówka: Przy pierwszym zapytaniu przez proxy macOS może pokazać systemowe okno z prośbą o wpisanie loginu i hasła do proxy, nawet jeśli już je wpisałeś. Wpisz dane i zaznacz pole Zapamiętaj w pęku kluczy. Po tym okno więcej się nie pojawi.

Weryfikacja: Otwórz w Safari serwis sprawdzający IP. Adres powinien się zgadzać z tym, który zwróciło polecenie curl w Kroku 1. Sprawdź także stronę z identyfikacją operatora: powinien wyświetlić się operator komórkowy, a nie twój domowy dostawca.

Możliwe problemy

  • Strony w ogóle się nie otwierają. Sprawdź, czy włączyłeś właśnie HTTP i HTTPS, a nie FTP lub SOCKS. Sprawdź port. Tymczasowo wyłącz oba przełączniki i upewnij się, że internet wrócił: tak zrozumiesz, że problem jest w ustawieniach proxy, a nie w sieci.
  • Stale wyskakuje okno z hasłem. Hasło wpisane z błędem lub ma spację na końcu po skopiowaniu. Usuń zawartość pola, wpisz hasło ponownie ręcznie.
  • IP się nie zmienił. Prawdopodobnie skonfigurowałeś niewłaściwy interfejs. Wróć do sekcji Sieć i sprawdź, która usługa jest oznaczona jako Połączono.

Krok 3: Konfigurujemy listę wyjątków prawidłowo

Cel etapu: zrozumieć, jaki ruch system puszcza z pominięciem proxy, i ustawić listę tak, aby lokalne usługi działały, a ruch zewnętrzny nie wyciekał.

Pole Pomiń proxy dla tych hostów i domen znajduje się na dole ekranu Proxy. Domyślnie są tam wpisane: *.local, 169.254/16. Wielu użytkowników albo w ogóle na nie nie patrzy, albo zaczyna wpisywać tam wszystko po kolei.

Jak czytać listę

  • *.local oznacza wszystkie adresy kończące się na .local. To urządzenia twojej domowej sieci: drukarka, dysk sieciowy, inne Maki. Nie da się ich otworzyć przez zewnętrzne proxy fizycznie, dlatego wpis jest potrzebny.
  • 169.254/16 oznacza zakres adresów serwisowych, które Mac przypisuje sobie, gdy nie otrzymał adresu od routera. Też sprawa lokalna.
  • Wpisy oddziela się przecinkami. Spacje po przecinkach są dozwolone.
  • Gwiazdka zastępuje dowolną część nazwy. Wpis *.example.com wykluczy wszystkie subdomeny example.com, ale nie samo example.com. Dla niego potrzebny jest osobny wpis.
  • Można podawać adresy IP i podsieci w formacie adres/maska, na przykład 192.168.0.0/16 dla całej domowej sieci.

Co warto dodać

  1. Kliknij w polu wyjątków po ostatnim wpisie.
  2. Dodaj przez przecinek localhost i 127.0.0.1. Bez nich lokalne serwery deweloperskie i panele administracyjne na twoim Macu będą próbowały iść przez mobilne proxy i będą się wywalać.
  3. Jeśli korzystasz z domowych urządzeń po IP, dodaj swoją podsieć lokalną. Zwykle to 192.168.0.0/16 lub 10.0.0.0/8. Swój lokalny adres możesz sprawdzić na ekranie TCP/IP w tym samym oknie.
  4. Kliknij OK.

Ostateczna lista dla większości użytkowników wygląda tak: *.local, 169.254/16, localhost, 127.0.0.1, 192.168.0.0/16.

Czego nie trzeba dodawać

Tu zaczyna się to, co w tytule nazwano obchodzeniem wyjątków. Chodzi o sytuacje, gdy ruch omija proxy nie dlatego, że tak chciałeś, ale dlatego, że lista jest niechlujnie zbudowana.

  • Nie wpisuj pojedynczej gwiazdki ani *.com. Taka maska wyłączy proxy praktycznie dla całego internetu, a przełączniki pozostaną niebieskie i będziesz myśleć, że wszystko działa.
  • Nie wpisuj domen serwisów, z którymi pracujesz. Jeśli dodasz *.facebook.com, żeby przyspieszyć wczytywanie, strona zobaczy twój prawdziwy IP. Dla zadań multikont jest to krytyczne.
  • Nie wpisuj hosta samego proxy. Nie ma to sensu: połączenie z proxy i tak idzie bezpośrednio.
  • Nie usuwaj *.local i 169.254/16. Zepsuje się AirDrop, drukowanie, dostęp do routera.

Uwaga: Lista wyjątków w ustawieniach systemowych działa tylko na aplikacje, które korzystają z systemowego proxy. Terminal, curl, git i skrypty w Pythonie jej nie widzą. One mają swoją listę, zmienną no_proxy, i konfiguruje się ją osobno. Dojdziemy do niej w Kroku 5. Jeśli oczekujesz, że wpis na liście systemowej wpłynie na skrypt, będziesz rozczarowany.

Wskazówka: Co jakiś czas otwieraj listę wyjątków i sprawdzaj ją wzrokiem. Niektóre firmowe narzędzia i agenci zarządzania urządzeniami dopisują tam swoje domeny przy instalacji. Zauważyć zbędną maskę typu *.com w dziesięć sekund jest łatwiej niż szukać przyczyny wycieku IP przez tydzień.

Weryfikacja: Otwórz w przeglądarce adres http://localhost lub dowolną lokalną stronę, którą masz. Powinna otworzyć się natychmiast, bez błędu proxy. Następnie otwórz zewnętrzny serwis sprawdzający IP: nadal powinien pokazywać IP mobilnego proxy.

Krok 4: Sterujemy proxy z Terminala poleceniem networksetup

Cel etapu: nauczyć się włączać, wyłączać i zmieniać systemowe proxy jednym poleceniem, bez myszy i bez dziesięciu kliknięć w ustawieniach. To umiejętność, która w ciągu miesiąca zwraca czas poświęcony na przeczytanie tego rozdziału.

W macOS jest wbudowane narzędzie networksetup. Robi dokładnie to samo, co Ustawienia systemowe, ale z wiersza poleceń. Wszystko, co skonfigurowałeś w Kroku 2, można powtórzyć, zmienić lub cofnąć jedną linią.

Poznajemy dokładną nazwę usługi sieciowej

  1. W Terminalu wpisz polecenie i naciśnij Enter:
networksetup -listallnetworkservices

Zobaczysz listę typu: Wi-Fi, Ethernet, Thunderbolt Bridge, iPhone USB. Znajdź tę, przez którą jesteś podłączony. Dalej w poleceniach będziemy używać Wi-Fi. Jeśli twoja usługa nazywa się inaczej, podstaw jej nazwę. Jeśli w nazwie jest spacja, na przykład Thunderbolt Bridge, ujmij ją w cudzysłów.

Patrzymy na aktualne ustawienia

networksetup -getwebproxy Wi-Fi

W odpowiedzi zobaczysz cztery linie: Enabled: Yes lub No, Server, Port, Authenticated Proxy Enabled. Jeśli wykonałeś Krok 2, Enabled będzie Yes, a serwer i port będą zgodne z wpisanymi. Analogicznie dla HTTPS:

networksetup -getsecurewebproxy Wi-Fi

Włączamy proxy HTTP i HTTPS jednym poleceniem

Format polecenia: networksetup, działanie, usługa, host, port, włącz autoryzację, login, hasło.

networksetup -setwebproxy Wi-Fi proxy.example.net 10000 on user123 pass456
networksetup -setsecurewebproxy Wi-Fi proxy.example.net 10000 on user123 pass456

Wpisz oba polecenia po kolei. Po każdym system może poprosić o hasło użytkownika Mac. Wpisz je, znaki przy wpisywaniu nie są wyświetlane, to normalne. Naciśnij Enter.

Słowo on po porcie włącza autoryzację. Jeśli twoje proxy ma autoryzację po IP, a nie po loginie, napisz off i nie podawaj loginu ani hasła.

Wyłączamy i włączamy proxy bez utraty ustawień

Najbardziej przydatna para poleceń. Nie kasują hosta i portu, a jedynie przesuwają przełącznik:

networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off

Aby włączyć z powrotem, zamień off na on. Tak w dwie sekundy przełączasz Maca w tryb bezpośredniego połączenia i z powrotem.

Sterujemy listą wyjątków z Terminala

Zobaczyć aktualną listę:

networksetup -getproxybypassdomains Wi-Fi

Ustawić nową listę w całości. Polecenie zastępuje wszystkie wpisy, więc wymień pełny zestaw oddzielony spacjami:

networksetup -setproxybypassdomains Wi-Fi "*.local" "169.254/16" localhost 127.0.0.1 "192.168.0.0/16"

Wpisy z gwiazdką i ukośnikiem bierzemy w cudzysłów, żeby powłoka nie próbowała ich interpretować. Wyczyścić listę całkowicie można słowem Empty zamiast domen, ale pamiętaj: wtedy lokalne adresy pójdą przez proxy i przestaną działać.

Uniwersalne polecenie podglądu

Narzędzie scutil pokazuje wszystkie ustawienia proxy w jednym miejscu, wraz z wyjątkami:

scutil --proxy

Szukaj linii HTTPEnable, HTTPProxy, HTTPPort, HTTPSEnable, ExceptionsList. Wartość 1 oznacza włączone, 0 wyłączone. Właśnie tego polecenia użyliśmy do kopii zapasowej.

Wskazówka: Otwórz Ustawienia systemowe na ekranie Proxy i wykonaj dowolne polecenie networksetup w Terminalu obok. Zobaczysz, jak przełączniki zmieniają się w czasie rzeczywistym. To najlepszy sposób, by upewnić się, że Terminal i interfejs graficzny sterują tymi samymi danymi.

Możliwe problemy

  • Błąd: Wi-Fi is not a recognized network service. Usługa nazywa się inaczej. Wykonaj networksetup -listallnetworkservices i skopiuj dokładną nazwę.
  • Polecenie przeszło, ale w ustawieniach nic się nie zmieniło. Zamknij i otwórz ponownie okno Ustawień systemowych, nie zawsze odświeża się natychmiast.
  • Prosi o hasło i pisze Sorry, try again. Wprowadzane jest hasło użytkownika Mac, a nie hasło proxy. Znaki nie są wyświetlane, po prostu wpisz i naciśnij Enter.

Weryfikacja: Wykonaj networksetup -setwebproxystate Wi-Fi off, odśwież serwis sprawdzający IP w przeglądarce, zobaczysz swój domowy IP. Wykonaj to samo polecenie z on, odśwież stronę, zobaczysz IP proxy. Jeśli przełączanie działa w obie strony, etap zaliczony.

Krok 5: Konfigurujemy proxy dla curl, git, Homebrew, pip i npm

Cel etapu: zmusić narzędzia wiersza poleceń do pracy przez proxy. Tu właśnie wycieka najwięcej ruchu, bo te programy nie patrzą na ustawienia systemowe.

Dlaczego systemowe proxy tu nie działa

Narzędzia typu curl, wget, git, pip, npm, brew są napisane do pracy we wszystkich systemach uniksowych. Nie wiedzą o macOS i jego Ustawieniach systemowych. Zamiast tego czytają zmienne środowiskowe o nazwach http_proxy, https_proxy, all_proxy i no_proxy. Jeśli zmiennych nie ma, ruch idzie bezpośrednio. Przełączniki w ustawieniach mogą być niebieskie, ile chcą.

Tymczasowe włączenie w bieżącym oknie Terminala

Wpisz trzy polecenia po kolei:

export http_proxy=http://user123:pass456@proxy.example.net:10000
export https_proxy=http://user123:pass456@proxy.example.net:10000
export no_proxy=localhost,127.0.0.1,*.local

Pierwsze kieruje ruch HTTP na proxy. Drugie kieruje ruch HTTPS tam samo. Zwróć uwagę: w wartości https_proxy protokół to nadal http, bo to protokół komunikacji z proxy, a nie ze stroną. Trzecie ustawia wyjątki dla Terminala. To właśnie ta osobna lista, o której mówiliśmy w Kroku 3.

Niektóre programy czytają zmienne tylko wielkimi literami. Aby nie zgadywać, ustaw też je:

export HTTP_PROXY=$http_proxy HTTPS_PROXY=$https_proxy NO_PROXY=$no_proxy

Teraz sprawdź bez przełącznika -x:

curl https://ifconfig.me

Jeśli wrócił IP proxy, zmienne działają. Wszystkie programy uruchomione z tego okna Terminala pójdą teraz przez mobilne proxy. Zamkniesz okno, zmienne znikną.

Stałe włączenie przez plik konfiguracyjny powłoki

W nowoczesnym macOS domyślną powłoką jest zsh, a jej ustawienia przechowywane są w pliku .zshrc w twoim katalogu domowym. Wszystko, co tam jest zapisane, wykonuje się przy otwarciu każdego nowego okna Terminala.

  1. Otwórz plik w edytorze nano poleceniem:
nano ~/.zshrc
  1. Strzałkami zejdź na koniec pliku.
  2. Wklej linie export z poprzedniej sekcji.
  3. Naciśnij Control i O, następnie Enter, aby zapisać. Naciśnij Control i X, aby wyjść.
  4. Zastosuj zmiany bez restartu:
source ~/.zshrc

Uwaga: W .zshrc hasło jest przechowywane jawnie. Jeśli Mac jest wspólny lub trzymasz plik w synchronizacji chmurowej, pomyśl dwa razy. Kompromisowy wariant opisany jest w bloku zaawansowanych ustawień: aliasy, które włączają proxy krótkim poleceniem, a nie automatycznie.

Git

Git umie czytać zmienne środowiskowe, ale pewniej ustawić opcje w jego konfiguracji:

git config --global http.proxy http://user123:pass456@proxy.example.net:10000

Wyłączyć:

git config --global --unset http.proxy

To ustawienie wpływa na operacje clone, pull, push po HTTPS. Dla dostępu SSH do repozytoriów potrzebne jest inne podejście, jest w zaawansowanym bloku.

Homebrew

Brew opiera się całkowicie na zmiennych środowiskowych. Jeśli ustawiłeś je w .zshrc, nie trzeba nic dodatkowo robić. Sprawdź poleceniem brew update: aktualizacja powinna przejść bez błędów połączenia.

pip

Instalator Pythona też czyta zmienne środowiskowe. Do jednorazowego uruchomienia przez proxy bez zmiennych użyj przełącznika:

pip install --proxy http://user123:pass456@proxy.example.net:10000 requests

npm

Menedżer pakietów Node.js przechowuje ustawienia osobno:

npm config set proxy http://user123:pass456@proxy.example.net:10000
npm config set https-proxy http://user123:pass456@proxy.example.net:10000

Wyłączyć: npm config delete proxy i npm config delete https-proxy.

SOCKS5 dla Terminala

Jeśli chcesz puszczać ruch terminalowy przez port SOCKS5, zamiast http_proxy i https_proxy ustaw jedną zmienną:

export all_proxy=socks5h://user123:pass456@proxy.example.net:10001

Curl i wiele narzędzi ją rozumie. Ale nie wszystkie: git po HTTPS nie zawsze czyta zmienną all_proxy, a pip nie rozumie SOCKS bez dodatkowego pakietu. Dla uniwersalności początkującym polecamy wariant HTTP.

Wskazówka: Dodaj do .zshrc linię alias myip='curl -s https://ifconfig.me; echo' i po tym wpisuj myip, aby w sekundę zobaczyć aktualny IP Terminala. To oszczędza dziesiątki sprawdzeń dziennie.

Weryfikacja: Otwórz nowe okno Terminala. Wykonaj curl https://ifconfig.me i git config --global --get http.proxy. Pierwsze polecenie zwraca IP proxy, drugie pokazuje adres proxy. To znaczy, że narzędzia są skonfigurowane i ustawienia przetrwają restart.

Krok 6: Znajdujemy ruch, który omija proxy, i naprawiamy

Cel etapu: upewnić się, że żadna aplikacja z twojego zestawu roboczego nie łączy się z internetem bezpośrednio bez twojej wiedzy. Tu usystematyzujemy wszystkie przyczyny wycieków i sprawdzimy każdą.

Przyczyna 1: aplikacja z własnymi ustawieniami proxy

Niektóre programy ignorują systemowe proxy i zmienne środowiskowe, bo mają własne ustawienia. Klasyczne przykłady: Telegram Desktop, Firefox, Discord, niektóre klienty poczty, klienty torrentów, przeglądarki antydetekcyjne. Każdy z nich ma w ustawieniach sekcję Sieć lub Proxy.

  1. Zrób listę aplikacji, przez które pracujesz.
  2. Otwórz każdą i znajdź sekcję ustawień sieci. Jeśli jest tam wybór Użyj systemowych ustawień proxy, wybierz go. Jeśli jest tylko ręczne wpisywanie, wpisz host, port, login i hasło.
  3. Sprawdź IP wewnątrz aplikacji, jeśli pozwala, albo przez serwis sprawdzający otwarty w tej aplikacji.

Ustawienia konkretnych przeglądarek i antydetektów są omówione osobno na blogu, tu ich nie powtarzamy. Ważne, by zrozumieć zasadę: w każdej aplikacji trzeba sprawdzić, skąd bierze proxy.

Przyczyna 2: aplikacja uruchomiona nie z Terminala

Zmienne środowiskowe z .zshrc działają tylko na programy uruchomione z Terminala. Jeśli uruchamiasz skrypt podwójnym kliknięciem, przez edytor kodu lub harmonogram, zmienne nie zostaną podchwycone. Rozwiązanie: ustawiaj proxy wewnątrz skryptu jawnie, albo uruchamiaj skrypt z Terminala, albo podaj zmienne w ustawieniach swojego edytora kodu.

Przyczyna 3: niewłaściwa usługa sieciowa

Skonfigurowałeś Wi-Fi, a Mac połączył się kablem, bo wpiąłeś stację dokującą. Albo odwrotnie. Sprawdzenie jest proste: networksetup -listallnetworkservices pokaże wszystkie usługi, a sekcja Sieć w ustawieniach podświetli aktywną. Skonfiguruj proxy dla każdej usługi, z której korzystasz. Polecenia networksetup z Kroku 4 trzeba powtórzyć, zamieniając Wi-Fi na Ethernet.

Przyczyna 4: zbędne maski na liście wyjątków

Mówiliśmy o tym w Kroku 3. Wykonaj networksetup -getproxybypassdomains Wi-Fi i upewnij się, że nie ma tam pojedynczej gwiazdki, masek typu *.com, *.ru, *.net ani domen serwisów roboczych. To samo sprawdź w zmiennej no_proxy poleceniem echo $no_proxy.

Przyczyna 5: IPv6

Jeśli twój domowy dostawca przydziela adres IPv6, a proxy działa po IPv4, niektóre aplikacje mogą próbować łączyć się po IPv6 bezpośrednio. Dla aplikacji systemowych to rzadkość, ale dla narzędzi bywa. Sprawdź, czy serwis sprawdzający IP nie pokazuje długiego adresu z dwukropkami. Jeśli pokazuje, otwórz ustawienia usługi, zakładkę TCP/IP i przełącz Skonfiguruj IPv6 na Tylko lokalne połączenie.

Przyczyna 6: HTTPS włączone, a HTTP nie, lub odwrotnie

W ustawieniach systemowych to dwa niezależne przełączniki. Zapomniałeś jednego i połowa ruchu wycieka. Wykonaj scutil --proxy i upewnij się, że HTTPEnable i HTTPSEnable są oba równe 1.

Przyczyna 7: pamięć podręczna przeglądarki i otwarte połączenia

Przeglądarka uruchomiona przed zmianą ustawień może trzymać stare połączenia jeszcze kilka minut. Całkowicie zamknij aplikację przez Command i Q, a nie krzyżykiem, i otwórz ponownie.

Wskazówka: Zrób sobie obchód kontrolny. Otwórz serwis sprawdzający IP w Safari, w Chrome, przez curl w Terminalu i wewnątrz każdej aplikacji roboczej. Zapisz cztery wyniki obok siebie. Jeśli wszystkie zgadzają się z IP mobilnego proxy, wycieków nie ma. Powtarzaj ten obchód po każdej zmianie proxy lub aktualizacji systemu.

Weryfikacja: Wszystkie punkty kontrolne z listy powyżej pokazują ten sam IP mobilnego proxy. Lokalne adresy otwierają się bezpośrednio. Żaden przełącznik nie został przypadkiem wyłączony.

Weryfikacja wyniku: ostateczna lista kontrolna

Przejdź po liście i odhacz każdy punkt. Jeśli któryś nie działa, wróć do odpowiedniego kroku.

Poziom systemowy

  • W Ustawieniach systemowych na ekranie Proxy włączone są Proxy sieci web (HTTP) i Bezpieczne proxy sieci web (HTTPS), oba z tym samym hostem i portem.
  • Autoryzacja jest włączona, login i hasło zapisane, okno z hasłem już się nie pojawia.
  • Safari pokazuje IP mobilnego proxy i operatora komórkowego.
  • Lista wyjątków zawiera *.local, 169.254/16, localhost, 127.0.0.1 i twoją podsieć lokalną. Zbędnych masek nie ma.
  • Lokalne adresy otwierają się bez błędów.

Terminal

  • Polecenie networksetup -getwebproxy Wi-Fi pokazuje Enabled: Yes i prawidłowy serwer.
  • Polecenia włączania i wyłączania przez networksetup działają w obie strony.
  • W nowym oknie Terminala echo $http_proxy wyświetla adres proxy.
  • curl https://ifconfig.me bez przełącznika -x zwraca IP proxy.
  • echo $no_proxy pokazuje listę lokalnych wyjątków.

Narzędzia

  • git config --global --get http.proxy zwraca adres proxy.
  • brew update kończy się bez błędów połączenia.
  • npm config get proxy zwraca adres proxy, jeśli pracujesz z Node.js.
  • Wszystkie aplikacje robocze z własnymi ustawieniami sieci są przełączone na systemowe proxy lub skonfigurowane ręcznie.

Jak przetestować całość

  1. Wyłącz systemowe proxy poleceniem networksetup -setwebproxystate Wi-Fi off i networksetup -setsecurewebproxystate Wi-Fi off.
  2. Odśwież serwis sprawdzający IP w przeglądarce. Powinien pojawić się domowy IP.
  3. Wykonaj curl https://ifconfig.me w Terminalu. Powinien pozostać IP proxy, bo Terminal używa zmiennych, a nie ustawień systemowych. To potwierdza, że poziomy są niezależne.
  4. Włącz systemowe proxy z powrotem. Odśwież przeglądarkę. Powinien wrócić IP proxy.
  5. Otwórz nowe okno Terminala, wykonaj unset http_proxy https_proxy i znowu curl. Teraz Terminal pokaże domowy IP. Zamknij okno: w następnym zmienne znów zostaną podchwycone z .zshrc.

Jeśli każde przejście dało oczekiwany wynik, w pełni kontrolujesz proxy na macOS na wszystkich poziomach. Taki był cel.

Typowe błędy i rozwiązania

Proxy włączone, ale IP się nie zmienia

Przyczyna: skonfigurowany niewłaściwy interfejs sieciowy, albo włączony tylko jeden z przełączników HTTP i HTTPS, albo przeglądarka nie została zrestartowana.

Rozwiązanie: sprawdź aktywną usługę w sekcji Sieć, wykonaj scutil --proxy i upewnij się, że oba Enable są równe 1, całkowicie zamknij przeglądarkę przez Command i Q.

Stale pojawia się okno z prośbą o hasło proxy

Przyczyna: błąd w loginie lub haśle, zbędna spacja po wklejeniu, albo w pęku kluczy zapisane są stare dane po poprzednim proxy.

Rozwiązanie: usuń zawartość pól i wpisz ponownie ręcznie. Otwórz aplikację Pęk kluczy, znajdź wpis z hostem proxy i usuń go, następnie wpisz dane ponownie i zaznacz pole Zapamiętaj.

Część stron otwiera się przez proxy, część bezpośrednio

Przyczyna: włączone tylko HTTP lub tylko HTTPS, albo na liście wyjątków pojawiła się szeroka maska.

Rozwiązanie: włącz oba przełączniki. Sprawdź listę wyjątków poleceniem networksetup -getproxybypassdomains i usuń wszystko, co nie dotyczy sieci lokalnej.

Terminal ignoruje proxy, choć system jest skonfigurowany

Przyczyna: narzędzia wiersza poleceń nie czytają ustawień systemowych. Zmienne środowiskowe nie są ustawione lub ustawione w innym oknie.

Rozwiązanie: wpisz linie export w .zshrc i wykonaj source ~/.zshrc. Sprawdź echo $http_proxy.

Błąd 407 Proxy Authentication Required

Przyczyna: proxy nie przyjmuje loginu i hasła. Często chodzi o znaki specjalne hasła w ciągu URL.

Rozwiązanie: zakoduj znaki specjalne: małpa jako %40, dwukropek jako %3A, krzyżyk jako %23. Upewnij się, że w panelu klienta dostawcy nie jest włączona autoryzacja po IP.

Lokalne usługi, drukarka lub router przestały działać

Przyczyna: z listy wyjątków usunięto *.local i 169.254/16, albo nie dodano localhost i podsieci lokalnej.

Rozwiązanie: przywróć listę poleceniem networksetup -setproxybypassdomains z pełnym zestawem wpisów z Kroku 3.

Po restarcie Maca proxy w Terminalu zniknęło

Przyczyna: zmienne były ustawione tylko przez export w otwartym oknie, a nie w .zshrc.

Rozwiązanie: otwórz nano ~/.zshrc, dodaj linie i zapisz. Jeśli masz inną powłokę, na przykład bash, plik nazywa się .bash_profile.

Wszystko działało, a po aktualizacji macOS się zepsuło

Przyczyna: duże aktualizacje systemu czasem resetują ustawienia usług sieciowych lub je zmieniają nazwy.

Rozwiązanie: otwórz plik proxy_backup.txt z Pulpitu, porównaj wartości i powtórz Krok 4 poleceniami networksetup. Sprawdź listę usług: być może pojawiła się nowa.

Wolne wczytywanie stron

Przyczyna: to normalne zachowanie mobilnych proxy, sieć komórkowa jest wolniejsza niż domowy dostawca. Ale czasem przyczyną jest to, że włączone są jednocześnie proxy HTTP i SOCKS, i aplikacje dwa razy próbują nawiązać połączenie.

Rozwiązanie: wyłącz systemowy SOCKS, zostaw tylko HTTP i HTTPS. Jeśli prędkość nadal jest niska, spróbuj zmienić IP przez link rotacji.

Dodatkowe możliwości dla zaawansowanych użytkowników

Podstawowa konfiguracja zrobiona. Dalej kilka technik, które zamieniają ręczną pracę w wygodny system.

Lokalizacje sieciowe: dwa profile, jedno przełączenie

macOS pozwala utworzyć kilka zestawów ustawień sieciowych i przełączać się między nimi w całości. To wygodniejsze niż za każdym razem przesuwać przełączniki.

  1. Otwórz Ustawienia systemowe, sekcję Sieć.
  2. Kliknij przycisk z trzema kropkami w dolnej części listy usług i wybierz Lokalizacje, następnie Edytuj lokalizacje.
  3. Kliknij plus, nazwij nową lokalizację Proxy. Kliknij Gotowe.
  4. Wybierz utworzoną lokalizację z listy. Skonfiguruj proxy dla Wi-Fi i Ethernet, jak w Kroku 2.
  5. Pierwotną lokalizację Automatycznie zostaw bez proxy.

Teraz przełączać można przez menu Apple, pozycję Lokalizacja, lub poleceniem w Terminalu:

networksetup -switchtolocation Прокси

I z powrotem: networksetup -switchtolocation Автоматически. Wszystkie usługi przełączają się jednocześnie, błędów z niewłaściwym interfejsem nie będzie.

Aliasy do szybkiego włączania i wyłączania w Terminalu

Jeśli nie chcesz trzymać proxy włączonego na stałe, dodaj do .zshrc dwie funkcje zamiast bezpośrednich export:

proxyon() { export http_proxy=http://user123:pass456@proxy.example.net:10000; export https_proxy=$http_proxy; export no_proxy=localhost,127.0.0.1,*.local; echo Proxy ON; }
proxyoff() { unset http_proxy https_proxy all_proxy no_proxy HTTP_PROXY HTTPS_PROXY; echo Proxy OFF; }

Po source ~/.zshrc polecenie proxyon włącza proxy w bieżącym oknie, proxyoff wyłącza. Hasło nadal jest w pliku, ale proxy nie aktywuje się bez twojej decyzji.

Jedno polecenie dla systemu i Terminala

Rozszerz funkcję proxyon, dodając do środka linie networksetup -setwebproxystate Wi-Fi on i networksetup -setsecurewebproxystate Wi-Fi on. Wtedy jedno polecenie włączy proxy i dla przeglądarek, i dla Terminala. W proxyoff dodaj te same polecenia z off. System poprosi o hasło administratora raz na sesję.

Zmiana IP mobilnego proxy z Terminala

Większość dostawców mobilnych proxy udostępnia link do zmiany IP. Można go wywołać przez curl bez otwierania przeglądarki:

curl -s "https://адрес-ротации-из-личного-кабинета"

Owiń w funkcję newip i dodaj do .zshrc. Kombinacja newip, potem myip pokaże nowy adres w dwie sekundy. Dla arbitrów, którzy przepuszczają dziesiątki sprawdzeń dziennie, to odczuwalna oszczędność czasu.

SSH przez proxy SOCKS5

Jeśli łączysz się z serwerami po SSH i chcesz, aby połączenie szło przez mobilne proxy, dodaj do pliku ~/.ssh/config blok:

Host myserver
 HostName 203.0.113.10
 ProxyCommand nc -X 5 -x proxy.example.net:10001 %h %p

Narzędzie nc jest wbudowane w macOS. Przełącznik -X 5 oznacza SOCKS5, przełącznik -x podaje adres proxy. Autoryzacji po loginie i haśle nc nie obsługuje, więc ten sposób nadaje się dla proxy z autoryzacją po IP.

Plik PAC dla elastycznych reguł

Przełącznik Automatyczna konfiguracja proxy przyjmuje adres pliku PAC: skryptu w JavaScripcie, który decyduje dla każdego adresu, czy iść przez proxy, czy bezpośrednio. To sposób na zrealizowanie złożonych wyjątków, których nie da się wyrazić maskami. Plik można trzymać lokalnie i wskazać jako file:/

O autorze

Roman Melnikov

Roman Melnikov

Technical Writer and System Administrator

Doświadczenie zawodowe: Technical writer and DevOps engineer with 9 years of experience. Created over 50 detailed guides on system configuration and administration. His instructions helped thousands of professionals successfully solve technical tasks. Popular author on Habr and YouTube.
Wykształcenie: Bauman Moscow State Technical University. Information Systems and Technologies
Ekspertyza:
Technical Documentation DevOps System Administration Linux Docker and Kubernetes CI/CD Infrastructure Automation Cloud Technologies System Monitoring Bash and Python Scripting

Podziel się artykułem: