Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam wszystkich.
Próbowałem podpiąć się pod temat o konfiguracji firewall'a ([url]https://forum.dug.net.pl/viewtopic.php?id=30822[/url]), ale a mam wrażenie, że mój post został nie zauważony. Jeśli jestem w błędzie bardzo przepraszam za otwarcie nowego tematu.
Mam problem z konfiguracją przekierowania portów. Od kilku dni próbuję się z tym uporać, ale nie wychodzi mi to zbyt dobrze - właściwie to w ogóle mi nie wychodzi :).
Z uwagi, że w mojej okolicy jedyna sensowna opcja dostępu do internetu to LTE, a co za tym idzie podwójny NAT zmuszony zostałem do zakupu VPS'a celem uruchomienia kilku usług które miały być dostępne z zewnątrz.
VPS jest na OpenVZ (najtańsza opcja ;]), na nim Debian 9 na standardowym w tej opcji kernelu 2.6.32.
VPS z moim domowym serwerkiem (dla uproszczenia będę pisać SRV) połączony jest tunelem OpenVPN.
Konfiguracja sieciowa wygląda tak:
VPS
# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/void inet 127.0.0.2/32 scope host venet0 inet <publiczne_ip> brd <publiczne_ip> scope global venet0:0 valid_lft forever preferred_lft forever 15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 link/none inet 10.0.0.1/24 brd 10.0.0.255 scope global tun0
SRV
# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 64:00:6a:92:c5:c6 brd ff:ff:ff:ff:ff:ff inet 192.168.10.252/20 brd 192.168.15.255 scope global eno1 valid_lft forever preferred_lft forever 3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.0.0.2/24 brd 10.0.0.255 scope global tun0 valid_lft forever preferred_lft forever
Tunel działa prawidłowo.
Działają pingi w obie strony i mogę połączyć się z ssh w jedną i w drugą stronę. Oczywiście z zewnątrz mogę połączyć się z SSH na VPS (jest na porcie 57185).
Jako pierwszą usługę chciałem przekierować SSH z SRV 10.0.0.2:22 na port VPS <publiczne_ip>:57186 by później kontynuować w podobny sposób z innymi - ale ugrzęzłem :/
Włączyłem net.ipv4.ip_forward w pliku /etc/sysctrl.conf
Z pomocą googla stworzyłem konfigurację firewalla i dodałem do niej moje przekierowanie portu
# Tablica FILTER *filter # Pozwol na kazdy ruch na loopback (lo) i odrzuc wszysko # do localhost co nie pochodzi z interfejsu lo. -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT -A OUTPUT -o lo -j ACCEPT # Pozwol na ping i powrot bledow ICMP. -A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -p icmp -j ACCEPT # Pozwol na ruch na porcie tcp 57185 (SSH). -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 57185 -j ACCEPT -A OUTPUT -p tcp -m state --state ESTABLISHED --sport 57185 -j ACCEPT # Pozwol na ruch na porcie tcp 57186 (SSH 10.0.0.2@tun0) na interfejsie VENET0. -A INPUT -i venet0 -p tcp -m state --state NEW,ESTABLISHED --dport 57186 -j ACCEPT -A OUTPUT -o venet0 -p tcp -m state --state ESTABLISHED --sport 57186 -j ACCEPT # Pozwol na ruch UDP na portcie 1194 (OpenVPN) na interfejsie VENET0. -A INPUT -i venet0 -p udp -m state --state NEW,ESTABLISHED --dport 1194 -j ACCEPT -A OUTPUT -o venet0 -p udp -m state --state ESTABLISHED --sport 1194 -j ACCEPT # Pozwol na rozwiazywanie nazw DNS -A INPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT -A OUTPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT # Pozwol na ruch na portach HTTP/S -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport 443 -j ACCEPT -A OUTPUT -p tcp -m state --state ESTABLISHED --dport 80 -j ACCEPT -A OUTPUT -p tcp -m state --state ESTABLISHED --dport 443 -j ACCEPT # Pozwol na ruch na interfejsie TUN (dla OpenVPN). -A INPUT -i tun+ -j ACCEPT -A FORWARD -i tun+ -j ACCEPT -A OUTPUT -o tun+ -j ACCEPT # Pozwol na ruch na interfejsie TAP (dla OpenVPN). -A INPUT -i tap+ -j ACCEPT -A FORWARD -i tap+ -j ACCEPT -A OUTPUT -o tap+ -j ACCEPT # Loguj wszystkie pakiety ktore nie spelniaja powyzszych zasad. # (opcjonalne, ale przydatne) -A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INP_denied: " --log-level 4 -A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FWD_denied: " --log-level 4 -A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_OUT_denied: " --log-level 4 # ...i odrzuc je. -A INPUT -j REJECT -A FORWARD -j REJECT -A OUTPUT -j REJECT COMMIT # Tablica NAT *nat # Przekierowanie portu dla SSH na 10.0.0.2:22@tun0 na port 57186 -A PREROUTING -p tcp --dport 57186 -j DNAT --to-destination 10.0.0.2:22 # Maskarada dla ruchu z 10.0.0.0/24 do interfejsu VENET0 -A POSTROUTING -s 10.0.0.0/24 -o venet0 -j MASQUERADE COMMIT
Tak to wygląda po zastosowaniu:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere REJECT all -- loopback/8 anywhere reject-with icmp-port-unreachable ACCEPT icmp -- anywhere anywhere state NEW icmp echo-request ACCEPT icmp -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW,ESTABLISHED tcp dpt:57185 ACCEPT tcp -- anywhere anywhere state NEW,ESTABLISHED tcp dpt:57186 ACCEPT udp -- anywhere anywhere state NEW,ESTABLISHED udp dpt:openvpn ACCEPT udp -- anywhere anywhere state NEW,ESTABLISHED udp dpt:domain ACCEPT udp -- anywhere anywhere state ESTABLISHED udp spt:domain ACCEPT tcp -- anywhere anywhere state NEW,ESTABLISHED tcp spt:http ACCEPT tcp -- anywhere anywhere state NEW,ESTABLISHED tcp spt:https ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning prefix "iptables_INPUT_denied: " REJECT all -- anywhere anywhere reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning prefix "iptables_FORWARD_denied: " REJECT all -- anywhere anywhere reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state ESTABLISHED tcp spt:57185 ACCEPT tcp -- anywhere anywhere state ESTABLISHED tcp spt:57186 ACCEPT udp -- anywhere anywhere state ESTABLISHED udp spt:openvpn ACCEPT udp -- anywhere anywhere state NEW,ESTABLISHED udp dpt:domain ACCEPT udp -- anywhere anywhere state ESTABLISHED udp spt:domain ACCEPT tcp -- anywhere anywhere state ESTABLISHED tcp dpt:http ACCEPT tcp -- anywhere anywhere state ESTABLISHED tcp dpt:https ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning prefix "iptables_OUTPUT_denied: " REJECT all -- anywhere anywhere reject-with icmp-port-unreachable # iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:57186 to:10.0.0.2:22 Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 10.0.0.0/24 anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination
Niestety przekierowanie nie chce mi śmigać - nie da się połączyć z <publiczne_ip>:57186
Zastanowił mnie fakt, choć nie wiem, czy dobrze to interpretuję, że gdy wyzeruję liczniki iptables i próbuję połączyć się z <publiczne_ip>:57186 to, żaden pakiet nie jest przefiltrowany przez moją regułę POSTROUTING.
Wygląda to tak:
# iptables -Z -t nat # iptables -t nat -vL Chain PREROUTING (policy ACCEPT 3 packets, 120 bytes) pkts bytes target prot opt in out source destination 1 60 DNAT tcp -- any any anywhere anywhere tcp dpt:57186 to:10.0.0.2:22 Chain POSTROUTING (policy ACCEPT 3 packets, 194 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- any any 10.0.0.0/24 anywhere Chain OUTPUT (policy ACCEPT 2 packets, 134 bytes) pkts bytes target prot opt in out source destination
Jeśli ktoś byłby mi w stanie pomóc to byłbym bardzo wdzięczny.
Edit:
Dodałem jeszcze do firewall'a regułę
-A FORWARD -i venet0 -o tun+ -j ACCEPT
z logów wywnioskowałem że były DROPy, ale nadal brak połączenia.
Edit2:
Zrobiłem sobie logowanie, dodałem do tablicy NAT:
-A PREROUTING -j LOG --log-prefix "iptables_PRR: " -A POSTROUTING -j LOG --log-prefix "iptables_POR: "
Po przestudiowaniu togo co zaczęło mi wyrzucać:
w PREROUTING tylko dodałem interfejs wejściowy więc nic to właściwie nie wnosi,
a POSTROUTING zmieniłem z maskarady na SNAT wg tego co pojawiało się w logach
-A PREROUTING -i venet0 -p tcp --dport 57186 -d <publiczny_ip> -j DNAT --to 10.0.0.2:22 -A POSTROUTING -o tun+ -p tcp --dport 22 -d 10.0.0.2 -j SNAT --to <publiczny_ip>:57186
Wygląda, że firewall jest skonfigurowany na chwilę obecną tak jak powinien.
Przekierowania są ok, po śledzeniu liczników w tablicach iptables wygląda, że jest ok.
Sęk w tym, że nadal nie mogę się połączyć na przekierowany SSH. Ma ktoś pomysł dlaczego tak może się dziać?
Edit3:
Popatrzyłem na dodany przed chwilą SNAT, popatrzyłem na zakomentowaną maskaradę i olśniło mnie, że robiłem z nią czeski błąd
miałem
-A POSTROUTING -s 10.0.0.0/24 -o venet0 -j MASQUERADE
a miało być
-A POSTROUTING -d 10.0.0.0/24 -o tun+ -j MASQUERADE
Zakomentowałem jeszcze raz SNAT i włączyłem poprawioną maskaradę i śmiga...
Tylko teraz mnie nurtuje dlaczego nie działa SNAT?
Na razie zostawię wpisy w tablicy NAT z SNAT i MASQUERADE jeśli działają,
ale jeśli ktoś miałby pomysł dlaczego nie działa SNAT (wolał bym jednak SNAT niż MASQUERADE) to proszę o info.
Pozdrawiam i zostawiam dla innych - może komuś się przyda coś z powyższego...
Ostatnio edytowany przez marpi82 (2019-02-06 12:28:38)
Offline
Cześć, mam bardzo podobny problem, identyczna sytuacja LTE + OpenVPN - w domu BananPi podłączona jako klient do VPN, z tym że ja nie chcę przekierowywać ruchu na publiczne IP, a chciałbym przekierować jakiś port z tun0 do eth0 na Bananie i przyznam szczerze, że się już pogubiłem.
Wydaje mi się, że powinno być coś takiego
-A FORWARD -i tun0 -p tcp -d 192.168.2.12 --dport 9999 -j DNAT --to 192.168.3.1:80
ale nawet mi tego przyjąć nie chce :/
Próbowałem też tak: https://raspberrypi.stackexchange.com/questions/42827/how-to-forward-traffic-from-tun0-to-specific-ip-behind-eth0-iptables
ale nie działa.
Chcę żeby po podłączeniu się do VPN po wpisaniu 192.168.2.12:9999 w przeglądarkę dostać się do sieci lokalnej 192.168.3.1 na port 80 czyli do routera ;)
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00031 | SET CHARSET latin2 |
0.00007 | SET NAMES latin2 |
0.00305 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.118.226.167' WHERE u.id=1 |
0.00126 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.118.226.167', 1732348994) |
0.00058 | SELECT * FROM punbb_online WHERE logged<1732348694 |
0.00086 | SELECT topic_id FROM punbb_posts WHERE id=322935 |
0.00098 | SELECT id FROM punbb_posts WHERE topic_id=30831 ORDER BY posted |
0.00062 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30831 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00112 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30831 ORDER BY p.id LIMIT 0,25 |
0.00086 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30831 |
Total query time: 0.00976 s |