Vraag Hoe kan ik doorsturen met iptables?


Ik wil dat verbindingen die binnenkomen op ppp0 op poort 8001 worden doorgestuurd naar 192.168.1.200 op eth0 op poort 8080.

Ik heb deze twee regels

-A PREROUTING  -p tcp -m tcp --dport 8001 -j DNAT --to-destination 192.168.1.200:8080

-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT

en het werkt niet. Wat mis ik?


110
2017-12-05 21:06


oorsprong


NAT HOWTO - Paul Tomblin
Ik ga met de n-p-r-tag (hoewel dit kon programmeergerelateerd zijn, hoewel natuurlijk slecht geformuleerd.) - Mihai Limbăşan
Hoe zit dit: ik ben een programmeur die een omgeving probeert op te zetten, zodat ik mijn servertoepassing in eclipse kan debuggen vanuit de innernet. Goed genoeg?
Natuurlijk, dat is wat ik bedoelde met "slecht geformuleerd" ... Zou je de vraag dienovereenkomstig kunnen bewerken? - Mihai Limbăşan


antwoorden:


Allereerst: controleer of doorsturen helemaal is toegestaan:

cat /proc/sys/net/ipv4/conf/ppp0/forwarding 
cat /proc/sys/net/ipv4/conf/eth0/forwarding 

Als beide terugkomen 1 het is ok. Zo niet, doe dan het volgende:

echo '1' | sudo tee /proc/sys/net/ipv4/conf/ppp0/forwarding
echo '1' | sudo tee /proc/sys/net/ipv4/conf/eth0/forwarding

Tweede ding - DNAT zou kunnen worden toegepast nat alleen tafel. Uw regel moet dus worden uitgebreid door ook de tabelspecificatie toe te voegen (-t nat):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Beide regels worden alleen toegepast op TCP-verkeer (als u ook UDP wilt wijzigen, moet u soortgelijke regels opgeven, maar dan met -p udp optie ingesteld).

Last, but not least is routing-configuratie. Type:

ip route

en controleer of 192.168.1.0/24 is een van de geretourneerde routing-items.


91
2018-03-24 11:24



Ik persoonlijk prefereer de sysctl syntaxis zoals sysctl net.ipv4.conf.eth0.forwarding=1 - Doud
Hoe verwijder ik de verkeerd ingevoerde regel? - Nickolai Leschov
tweede regel: "iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW, ESTABLISHED, RELATED -j ACCEPT" is NIET vereist als je geen firewall-beperkingen / beveiliging hebt, die is het geval met de meeste thuis-LAN's, anders moet je voorzichtig zijn met -A, want het zal het toevoegen NA beperkingen / beveiliging en werkt mogelijk niet (dus check -I in plaats daarvan, dat voegt VOOR de regels van iptables toe) - THESorcerer
@ ÁronLőrincz, No. Iptables-regels zijn veranderlijk, tenzij ze tijdens het opstarten expliciet worden geladen. - sherrellbc
@Nickolai Leschov, voer dezelfde vervanging in -A met -D - Alexei Martianov


Ik denk dat wat je wilt is:

iptables -A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state 
    NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 8001 -j DNAT --to-destination
    192.168.1.200:8080

14
2017-12-05 21:43



ummm ... dat IS wat ik al heb. Ik gebruik iptables-restore om het te laden, dus elk is in een eigen sectie, maar dat is wat ik hierboven heb geschreven.
Oké, de syntaxis zag er slecht uit in het origineel. Heb je -i ppp0 in de regels geprobeerd? Wat is het probleem precies? - Robert Gamble


Je vergeet het bronadres van de postrouting SNAT 'ing:

sysctl net.ipv4.ip_forward=1
yours_wan_ip=101.23.3.1
-A PREROUTING  -p tcp -m tcp -d $yours_wan_ip --dport 8001 -j DNAT --to-destination 192.168.1.200:8080

-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT

-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip

En vergeet niet om je linux-firewall in te stellen als standaardgateway op een computer met 192.168.1.200 adres.


12
2018-06-09 11:09



Je hebt het achterstevoren op de POSTROUNTING stap. Op dit punt gaat het gesprek nog steeds over --destination liever dan --source. - sherrellbc


Ik heb het volgende bash-script gemaakt om dit op mijn linux-router te doen. Het leidt het WAN IP automatisch af en bevestigt uw selecties alvorens verder te gaan.

#!/bin/bash

# decide which action to use
action="add"
if [[ "-r" == "$1" ]]; then
  action="remove"
  shift
fi

# break out components
dest_addr_lan="$1"
dest_port_wan="$2"
dest_port_lan="$3"

# figure out our WAN ip
wan_addr=`curl -4 -s icanhazip.com`

# auto fill our dest lan port if we need to
if [ -z $dest_port_lan ]; then
  dest_port_lan="$dest_port_wan"
fi

# print info for review
echo "Destination LAN Address: $dest_addr_lan"
echo "Destination Port WAN: $dest_port_wan"
echo "Destination Port LAN: $dest_port_lan"
echo "WAN Address: $wan_addr"

# confirm with user
read -p "Does everything look correct? " -n 1 -r
echo    # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]; then
  if [[ "remove" == "$action" ]]; then
    iptables -t nat -D PREROUTING  -p tcp -m tcp -d $wan_addr --dport     $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
    iptables -D FORWARD -m state -p tcp -d $dest_addr_lan --dport     $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -D POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport     $dest_port_lan -j SNAT --to-source $wan_addr
    echo "Forwarding rule removed"
  else
    iptables -t nat -A PREROUTING  -p tcp -m tcp -d $wan_addr --dport     $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
    iptables -A FORWARD -m state -p tcp -d $dest_addr_lan --dport     $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -A POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport $dest_port_lan -j SNAT --to-source $wan_addr
    echo "Forwarding rule added"
  fi
else
  echo "Info not confirmed, exiting..."
fi

Het gebruik van het script is eenvoudig, kopieer en plak het gewoon in een bestand en dan.

# chmod +x port_forward.sh
# ./port_forward.sh 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule added

Om dezelfde regel te verwijderen

# ./port_forward.sh -r 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule removed

Ik dacht dat dit iemand tijd op hun respectieve router kon besparen.


5
2017-12-14 22:02





Proberen

echo "1" > /proc/sys/net/ipv4/conf/ppp0/forwarding
echo "1" > /proc/sys/net/ipv4/conf/eth0/forwarding

Deze bestanden vertellen de kernel dat het is toegestaan ​​om pakketten tussen de interfaces door te sturen.


1
2017-12-10 02:58





Ik had de taak om MACHINE_A te laten denken dat de service fysiek wordt uitgevoerd op MACHINE_B, maar transparant alle aanvragen opnieuw routeert naar MACHINE_C.

De truc was om MASQUERADE te gebruiken.

sysctl net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp -d MACHINE_B --dport 443 -j DNAT --to-destination MACHINE_C

iptables -t nat -A POSTROUTING -s MACHINE_A -o INTERFACE_NAME -j MASQUERADE

Houd er rekening mee dat je misschien de opdrachten wilt aanpassen:

  1. Om pakketverzending alleen toe te staan ​​op een specifieke interface. Bijvoorbeeld:

    sysctl net.ipv4.conf.eth0.forwarding=1
    
  2. Om niet alleen MACHINE_A, maar ook alle anderen toe te staan ​​om port forwarding te gebruiken, verwijder:

    -s MACHINE_A
    

1
2018-03-17 09:02





Deze opdracht werkt niet voor mij:

-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip

Ik heb 2 LAN-interfaces en FORWARD werk wanneer ik zal schrijven:

iptables -t nat -A POSTROUTING -o $LAN_IF -p tcp -m tcp --dport $FW_PORT -j SNAT --to-source $LAN_IP
  • LAN_IF - LAN-interface (bijvoorbeeld eth1, br0 ...)
  • FW_PORD - doorgestuurde poort (op detination host)
  • LAN_IP - IP-adres op LAN-interface (op de router)

PREROUTING en FORWARD zijn natuurlijk ook nodig :)


0
2018-05-24 12:04