Soru İptables ile nasıl iletişim kurabilirim?


8001 numaralı bağlantı noktasında ppp0 üzerinde gelen bağlantıların 8080 numaralı bağlantı noktasındaki et üzerinde 192.168.1.200 adresine yönlendirilmesini istiyorum.

Bu iki kurala sahibim

-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

ve işe yaramıyor. Neyi kaçırıyorum?


110
2017-12-05 21:06


Menşei


NAT NASIL - Paul Tomblin
Ben n-p-r etiketi ile gidiyorum (bununla birlikte could Programla ilgili olmak, elbette ki iyi bir şekilde ifade edilmemiş olmak.) - Mihai Limbăşan
Buna ne dersiniz: Ben bir programcıyım, böylece bir ortam hazırlamaya çalışıyorum, böylece sunucu uygulamamı innampet'ten çağrıldım. Yeterince yakın?
Tabii, "kötü dille" demek istediğim buydu ... Soruyu buna göre düzenleyebilir misiniz? - Mihai Limbăşan


Cevaplar:


Her şeyden önce - iletime izin verilip verilmediğini kontrol etmelisiniz:

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

Her ikisi de döner 1 tamam. Aşağıdakileri yapmazsanız:

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

İkinci şey - DNAT uygulanabilir nat sadece masa. Yani, kuralınız da tablo şartname ekleyerek uzatılmalıdır (-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

Her iki kural da yalnızca TCP trafiğine uygulanır (eğer UDP'yi değiştirmek isterseniz, benzer kurallar sağlamanız gerekir. -p udp seçenek kümesi).

Son olarak, ancak en azından yönlendirme yapılandırması. Tür:

ip route

ve kontrol edin 192.168.1.0/24 döndürülen yönlendirme girişleri arasında.


91
2018-03-24 11:24



Ben şahsen tercih ederim sysctl sözdizimi gibi sysctl net.ipv4.conf.eth0.forwarding=1 - Doud
Yanlış girilen kuralı nasıl kaldırırım? - Nickolai Leschov
ikinci satır: "iptables -A FORWARD -p tcp -d 192.168.1.200 --d 8080 -m state --state YENİ, KURULDU, İLGİLİ -j KABUL" güvenlik duvarı kısıtlamaları / güvenlik, yoksa, gerekli DEĞİLDİR Ev LAN'larının çoğunda durum böyle ise, -A ile dikkatli olunuz, ekleyeceğinizden sonra kısıtlamalar / güvenlik ve işe yaramayabilirler (bu yüzden, -I yerine, iptables kurallarının ÖNÜNÜ ekleyerek kontrol edin) - THESorcerer
@ ÁronLőrincz, Hayır. Önyükleme sırasında açıkça yüklenmediği takdirde, Iptables kuralları uçucudur. - sherrellbc
@Nickolai Leschov, aynı değiştirmeyi girin -A ile -D - Alexei Martianov


Bence istediğin şey:

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 ... bu benim zaten sahip olduğum şey. Yüklemek için iptables-restore kullanıyorum, böylece her biri kendi bölümünde, ama yukarıda yazdığım buydu.
Tamam, sözdizimi orijinalinde kötü görünüyordu. Kurallara ppp0 denedin mi? Sorun tam olarak nedir? - Robert Gamble


PostScript kaynak adresi SNAT 'ini unuttunuz:

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

Ayrıca, linux güvenlik duvarınızı 192.168.1.200 adresiyle bilgisayarda varsayılan ağ geçidi olarak ayarlamayı unutmayın.


12
2018-06-09 11:09



Onu geriye doğru aldın. POSTROUNTING adım. Bu noktada konuşma hala hakkında --destination ziyade --source. - sherrellbc


Linux router'ımda bunu yapmak için aşağıdaki betik betiğini oluşturdum. WAN IP'yi otomatik olarak yönlendirir ve ilerlemeden önce seçimlerinizi onaylar.

#!/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

Komut dosyasının kullanımı basittir, sadece kopyalayıp bir dosyaya yapıştırın.

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

Aynı kuralı kaldırmak

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

Bunun, ilgili yönlendiricilere zaman kazandırabileceğini düşündüm.


5
2017-12-14 22:02





Deneyin

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

Bu dosyalar, çekirdeğin ara birimler arasındaki paketleri iletmesine izin verdiğini söyler.


1
2017-12-10 02:58





MACHINE_A'yı hizmetin fiziksel olarak MACHINE_B üzerinde çalıştığını düşünerek, tüm istekleri MACHINE_C'ye yeniden yönlendirmeyi düşündüm.

Hile MASQUERADE kullanmaktı.

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

Lütfen komutları değiştirmek isteyebileceğinizi unutmayın:

  1. Sadece belirli bir arayüzde paket iletmeye izin vermek. Örneğin:

    sysctl net.ipv4.conf.eth0.forwarding=1
    
  2. Yalnızca MACHINE_A'ya değil, diğerlerinin de bağlantı noktası yönlendirmesine izin vermek için aşağıdakileri kaldırın:

    -s MACHINE_A
    

1
2018-03-17 09:02





Bu komut benim için çalışmıyor:

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

Yazacağım zaman 2 LAN arayüzüne ve FORWARD çalışmam var:

iptables -t nat -A POSTROUTING -o $LAN_IF -p tcp -m tcp --dport $FW_PORT -j SNAT --to-source $LAN_IP
  • LAN_IF - LAN arayüzü (örn. Eth1, br0 ...)
  • FW_PORD - iletilen bağlantı noktası (saptama ana bilgisayarında)
  • LAN_IP - LAN arayüzünde IP adresi (yönlendiricide)

ÖĞRENME ve İLERİ de gerekli, tabii ki :)


0
2018-05-24 12:04