Προς το περιεχόμενο

Port Forward με iptables - Πώς;


macabre_sunsets

Προτεινόμενες αναρτήσεις

Δημοσ.

Το δίκτυό μου έχει ώς εξής:

Modem με ΙΡ 10.15.160.1 (subnet: 255.255.255.224)

Server με ΙΡ 10.15.160.2 (subnet: 255.255.255.224) και Gateway 10.15.160.1

 

Ο server τρέχει OpenVZ και τα Virtual Machines έχουν ΙΡ στο subnet 10.15.160.33 - 10.15.160.62 (255.255.255.224).

 

Για να έχουν πρόσβαση τα VM στο Internet έχω βάλει ένα static route στο modem:

>Destination IP Address	10.15.160.32
IP Subnet Mask			255.255.255.224
Gateway IP Address		10.15.160.2

 

Ως εδώ όλα δουλεύουν μια χαρά.

 

Αυτό που θέλω είναι να κάνω forward κάποιες πόρτες στα VM, αλλά δυστυχώς δεν μπορώ μέσω του modem γιατί αν βάλω μια ΙΡ από το εύρος 10.15.160-33 - 10.15.160.62 μου λέει πως δεν είναι έγκυρη ΙΡ.

Αυτό που μπορώ να κάνω και δουλεύει μια χαρά είναι port forwarding στον server. Με βάση αυτό, σκέφτηκα να κάνω όποιες πόρτες θέλω forward στον server και έπειτα να τις κάνω πάλι forward από τον server προς τα VM. Δυστυχώς όμως δεν κατάφερα κάτι με κάποιες εντολές για iptables που βρήκα στο internet για αυτό και θα ήθελα την βοήθειά σας.

 

Εάν βοηθάνε, παραθέτω το /etc/network/interfaces και το ifconfig από τον server.

 

/etc/network/interfaces

 

># The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
       address 10.15.160.2
       netmask 255.255.255.224
       network 10.15.160.0
       broadcast 10.15.160.31
       gateway 10.15.160.1
       bridge_ports eth0
       bridge_fd 9
       bridge_hello 2
       bridge_maxage 12
       bridge_stp off

 

ifconfig

 

>br0       Link encap:Ethernet  HWaddr --:--:--:--:--:--
         inet addr:10.15.160.2  Bcast:10.15.160.31  Mask:255.255.255.224
         inet6 addr: fe80::3e4a:92ff:fe6d:12fc/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:19950950 errors:0 dropped:0 overruns:0 frame:0
         TX packets:21846112 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:17423225214 (16.2 GiB)  TX bytes:10561972458 (9.8 GiB)

eth0      Link encap:Ethernet  HWaddr --:--:--:--:--:--
         inet6 addr: fe80::3e4a:92ff:fe6d:12fc/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:19950562 errors:0 dropped:0 overruns:0 frame:0
         TX packets:21845815 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:17788977274 (16.5 GiB)  TX bytes:10650889110 (9.9 GiB)
         Interrupt:18

lo        Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:684 errors:0 dropped:0 overruns:0 frame:0
         TX packets:684 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:42091 (41.1 KiB)  TX bytes:42091 (41.1 KiB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
         UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
         RX packets:21607241 errors:0 dropped:0 overruns:0 frame:0
         TX packets:19707738 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:10240002988 (9.5 GiB)  TX bytes:17408294174 (16.2 GiB)

 

Λειτουργικό: Debian Squeeze

Δημοσ.

Δοκίμασε:

 

> iptables -t nat -A PREROUTING -p tcp --dport 666 --dst 10.15.160.2 -j DNAT --to 10.15.160.35:80

(και από τον ακριανό router θα κάνεις port forwarding την port της public address που θέλεις στην port 666 του 10.15.160.2)

Δημοσ.

Δυστυχώς δεν πέτυχε το παραπάνω.

 

Παραθέτω τα ακόλουθα μήπως βοηθάνε.

 

>root@server:~# iptables -t nat -A PREROUTING -p tcp --dport 666 --dst 10.15.160.2 -j DNAT --to 10.15.160.35:80
root@server:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

 

>root@server:~# iptables-save
# Generated by iptables-save v1.4.8 on Fri Aug 19 07:16:01 2011
*nat
:PREROUTING ACCEPT [659:71003]
:POSTROUTING ACCEPT [647:69292]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 10.15.160.2/32 -p tcp -m tcp --dport 666 -j DNAT --to-destination 10.15.160.35:80
COMMIT
# Completed on Fri Aug 19 07:16:01 2011
# Generated by iptables-save v1.4.8 on Fri Aug 19 07:16:01 2011
*mangle
:PREROUTING ACCEPT [1539:180499]
:INPUT ACCEPT [148:11308]
:FORWARD ACCEPT [1379:167504]
:OUTPUT ACCEPT [102:9480]
:POSTROUTING ACCEPT [1481:176984]
COMMIT
# Completed on Fri Aug 19 07:16:01 2011
# Generated by iptables-save v1.4.8 on Fri Aug 19 07:16:01 2011
*filter
:INPUT ACCEPT [148:11308]
:FORWARD ACCEPT [1379:167504]
:OUTPUT ACCEPT [102:9480]
COMMIT
# Completed on Fri Aug 19 07:16:01 2011

Δημοσ.

  • To 10.15.160.35 τι gateway έχει; (και ακούει κάτι στην 80 του, έτσι; )
  • Ο Host server δεν έχει κάποια διεύθυνση στο 10.15.160.32/255.255.255.224;
  • Bridge έχεις κάνει το eth0 με το venet0; (brctl show)
  • Πιο χρήσιμη από της ifconfig ίσως είναι η έξοδος της "ip addr show" (ελπίζω να μη δούμε όλες της διευθύνσεις των guests πάνω στo br0 του host!)
  • Μπορείς να κουμπώσεις ένα άλλο pc στο δίκτυο με IP 10.15.160.3, να του ορίσεις gateway για το 10.15.160.32/255.255.255.224 το 10.16.160.2 και να κάνεις από εκεί 'telnet 10.16.160.2 666'; Έτσι θα δούμε αν το πρώτο NAT δουλεύει. Αν είναι κόπος, μην το κάνεις ακόμα γιατί μπορεί να μη χρειαστεί.

Δυστυχώς δεν έχω χρησιμοποιήσει το OpenVZ και δεν ξέρω πώς χειρίζεται τα δίκτυα (χρησιμοποιώ Vserver με τον dummy-interface driver). Αλλά αν φαντάζομαι σωστά, το OpenVZ χρησιμοποιεί το venet0 για τους guests, το οποίο έχεις κάνει bridge με το eth0, οπότε στην ουσία είναι όλα ένα δίκτυο, παρόλο που από αυτό περνάς 2 διαφορετικά IP subnets. Σε αυτή την περίπτωση θα μπορούσες να δώσεις και μια πρόσθετη διεύθυνση IP στον ακριανό ρούτερ σου (πιθανότατα το υποστηρίζει) στο 10.15.160.32/255.255.255.224, ώστε να μπορεί να δει (και να κάνει port forwarding προς) τα guests απευθείας.

Δημοσ.

α)

/etc/network/interfaces του 10.15.160.35

 

># Auto generated lo interface
auto lo
iface lo inet loopback

# Auto generated venet0 interface
auto venet0
iface venet0 inet static
       address 127.0.0.1
       netmask 255.255.255.255
       broadcast 0.0.0.0
       up route add -net 192.0.2.1 netmask 255.255.255.255 dev venet0
auto venet0:0
iface venet0:0 inet static
       address 10.15.160.35
       netmask 255.255.255.255
       broadcast 0.0.0.0
       gateway 192.0.2.1

 

 

ifconfig του 10.15.160.35

 

>lo        Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0   TX bytes:0 (0.0 

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
         inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
         UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0   TX bytes:0 (0.0 

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
         inet addr:10.15.160.35  P-t-P:10.15.160.35  Bcast:0.0.0.0  Mask:255.255.255.255
         UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

 

 

β)

Ο Host έχει μόνο την 10.15.160.2. Δεν του έχω βάλει άλλη ΙΡ.

 

γ)

brctl show στον Host Server

 

>bridge name     bridge id               STP enabled     interfaces
br0             8000.3c4a926d12fc       no              eth0

 

 

δ)

ip addr show στον Host Server

 

>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
   link/ether --:--:--:--:--:-- brd ff:ff:ff:ff:ff:ff
   inet6 fe80::----:--ff:fe--:--/64 scope link
      valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
   link/ether --:--:--:--:--:fc brd ff:ff:ff:ff:ff:ff
   inet 10.15.160.2/27 brd 10.15.160.31 scope global br0
   inet6 fe80::----:--ff:fe-:--fc/64 scope link
      valid_lft forever preferred_lft forever
4: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
   link/void

 

 

ε)

Μιας και δεν είμαι σπίτι τώρα, δεν μπορώ να βάλω κάποιον υπολογιστή. Όταν πάω και εάν δεν έχουμε βγάλει άκρη θα βάλω το laptop.

 

 

Το bridge το έχω κάνει επειδή το έλεγε σε έναν οδηγό για KVM (μιας και τρέχει παράλληλα με το OpenVZ στον Host Server). Δεν του έχω προσθέσει το venet0 στο bridge, οπότε υπάρχει περίπτωση να φταίει αυτό;

 

Θα προτιμούσα να μην βάλω και άλλη ΙΡ στο modem/router. Αν αυτή αποδειχθεί η μόνη λύση, προτιμώ να αλλάξω subnet στα VM ώστε να βρίσκονται στο 10.15.160.1 - 10.15.160.30 (υποθέτω μετά δεν θα υπάρχει πρόβλημα με το port forward από την μεριά του modem/router).

 

Μήπως το static route που έχω βάλει στο modem/router παρακάμπτει τον Host Server με συνέπεια η κίνηση να μην περνάει καν από το iptables;

Δημοσ.

Το bridge0 αφού περιέχει μόνο το eth0 δεν κάνει απολύτως τίποτα. Μην του προσθέσεις και το venet0, καλύτερα κατάργησέ το και χρησιμοποίησε απλά το eth0.

[EDIT] μπορεί να κάνω λάθος, βλέπω κάποιους που προτείνουν τη χρήση του με αυτόν τον τρόπο, αλλά πραγματικά δε μπορώ να φανταστώ γιατί.

 

Η static route στο modem/router δεν παρακάμπτει τον Host server, το αντίθετο: το υποχρεώνει να προωθεί τα πακέτα με τους συγκεκριμένους προορισμούς στο 10.15.160.2. Αν θέλεις να παίξεις με routing και να μην υποχρεώσεις τον host server να κάνει και SNAT (που θα ήταν περιτό και μάλλον άσχημο) είναι απαράιτητη.

 

Η χρήση της 192.0.2.1 (δεν είναι καν σε private space!) στους guests με παραξενεύει, θα διαβάσω λίγο για το vznetdev και θα επανέλθω.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...