Pertanyaan Bagaimana saya bisa memforward forward dengan iptables?


Saya ingin koneksi datang pada ppp0 pada port 8001 untuk diteruskan ke 192.168.1.200 pada eth0 pada port 8080.

Saya punya dua aturan ini

-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

dan itu tidak berhasil. Apa yang saya rindukan?


110
2017-12-05 21:06




NAT HOWTO - Paul Tomblin
Saya akan pergi dengan tag n-p-r (meskipun ini bisa berhubungan dengan pemrograman, meskipun diucapkan dengan buruk tentu saja.) - Mihai Limbăşan
Bagaimana dengan ini: Saya seorang programmer yang mencoba untuk mengatur lingkungan sehingga saya dapat men-debug aplikasi server saya di gerhana yang dipanggil dari innernet. Cukup dekat?
Tentu, itu yang saya maksud dengan "kalimat buruk" ... Bisakah Anda mengedit pertanyaan yang sesuai? - Mihai Limbăşan


Jawaban:


Pertama-tama - Anda harus memeriksa apakah penerusan diizinkan sama sekali:

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

Jika keduanya kembali 1 tidak apa-apa. Jika tidak lakukan hal berikut:

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

Hal kedua - DNAT bisa diterapkan nat tabel saja. Jadi, aturan Anda harus diperluas dengan menambahkan spesifikasi tabel juga (-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

Kedua aturan hanya diterapkan untuk trafik TCP (jika Anda ingin mengubah UDP juga, Anda perlu memberikan aturan serupa tetapi dengan -p udp set pilihan).

Terakhir, tetapi tidak kalah penting adalah konfigurasi perutean. Mengetik:

ip route

dan periksa apakah 192.168.1.0/24 adalah di antara entri routing yang dikembalikan.


91
2018-03-24 11:24



Saya pribadi lebih suka sysctl sintaks seperti sysctl net.ipv4.conf.eth0.forwarding=1 - Doud
Bagaimana cara menghapus aturan yang salah dimasukkan? - Nickolai Leschov
baris kedua: "iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state BARU, ESTABLISHED, RELATED -j ACCEPT" TIDAK diperlukan jika Anda tidak memiliki pembatasan / keamanan firewall, yang adalah kasus dengan sebagian besar LAN rumah, jika tidak hati-hati dengan -A, karena akan menambahkannya SETELAH pembatasan / keamanan dan mungkin tidak berfungsi (jadi periksalah - Sebagai gantinya, itu adalah menambahkan IN DEPAN aturan iptables) - THESorcerer
@ ÁronLőrincz, Tidak. Aturan Iptables tidak stabil kecuali dimuatkan secara eksplisit saat boot. - sherrellbc
@Nickolai Leschov, masukkan penggantian yang sama -A dengan -D - Alexei Martianov


Saya pikir apa yang Anda inginkan adalah:

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 ... itulah yang sudah saya miliki. Saya menggunakan iptables-restore untuk memuatnya sehingga masing-masing ada di bagiannya sendiri, tetapi itulah yang saya tulis di atas.
Oke, sintaksnya terlihat buruk dalam aslinya. Apakah Anda mencoba -i ppp0 dalam aturan? Apa masalahnya sebenarnya? - Robert Gamble


Anda lupa alamat sumber 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

Dan jangan lupa untuk mengatur firewall linux Anda sebagai gateway default pada komputer dengan alamat 192.168.1.200.


12
2018-06-09 11:09



Anda mendapatkannya di belakang POSTROUNTING langkah. Pada titik ini pembicaraan masih tentang --destination daripada --source. - sherrellbc


Saya telah membuat skrip bash berikut untuk melakukan ini di router linux saya. Secara otomatis memasukkan IP WAN dan mengkonfirmasi pilihan Anda sebelum melanjutkan.

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

Penggunaan skrip sederhana hanya salin dan tempel ke file dan kemudian.

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

Untuk menghapus aturan yang sama

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

Saya pikir ini mungkin menghemat waktu seseorang di router masing-masing.


5
2017-12-14 22:02





Mencoba

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

File-file ini memberitahu kernel itu diizinkan untuk meneruskan paket-paket antara antarmuka.


1
2017-12-10 02:58





Saya memiliki tugas untuk membuat MACHINE_A berpikir bahwa layanan ini berjalan secara fisik pada MACHINE_B, tetapi secara transparan merutekan ulang semua permintaan ke MACHINE_C.

Triknya adalah menggunakan MASQUERADE.

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

Harap dicatat bahwa Anda mungkin ingin mengubah perintah:

  1. Untuk memungkinkan pengiriman paket hanya pada antarmuka tertentu. Sebagai contoh:

    sysctl net.ipv4.conf.eth0.forwarding=1
    
  2. Untuk memungkinkan tidak hanya MACHINE_A, tetapi juga semua yang lain untuk menggunakan port forwarding, hapus:

    -s MACHINE_A
    

1
2018-03-17 09:02





Perintah ini tidak berfungsi untuk saya:

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

Saya memiliki 2 antarmuka LAN dan MAJU bekerja ketika saya akan menulis:

iptables -t nat -A POSTROUTING -o $LAN_IF -p tcp -m tcp --dport $FW_PORT -j SNAT --to-source $LAN_IP
  • LAN_IF - Antarmuka LAN (mis. Eth1, br0 ...)
  • FW_PORD - port yang diteruskan (pada host detinasi)
  • LAN_IP - Alamat IP pada antarmuka LAN (pada router)

PREROUTING dan FORWARD diperlukan juga, tentu saja :)


0
2018-05-24 12:04