Kemarin, saya mengirim pertanyaan di sini tapi saya pikir tidak cukup jelas dalam kata-kata saya. BTW, Pertanyaan ini bukan duplikat.
Saya memiliki AWS VPC Setup seperti di bawah ini.
TUJUAN / MASALAH : SSH ke Server A dari internet. Dan itu tidak berfungsi.
Server A adalah dalam subnet pribadi dan karenanya saya ingin mengaktifkan iptables NATing pada instance NAT saya sehingga saya dapat ssh ke SErver A langsung dari internet
Saya menjalankan perintah di bawah ini pada contoh NAT:
NAT# iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 10.0.1.243:22
Penerusan IP diaktifkan pada instance NAT:
NAT# sysctl -p
net.ipv4.ip_forward = 1
MASQUERADE dijalankan dengan instance NAT:
NAT# iptables -t nat -vnL POSTROUTING
Chain POSTROUTING (policy ACCEPT 6 packets, 312 bytes)
pkts bytes target prot opt in out source destination
199 16466 MASQUERADE all -- * eth0 10.0.0.0/16 0.0.0.0/0
Grup Keamanan AWS dikonfigurasikan dengan baik untuk memungkinkan berbagai akses yang diperlukan untuk test case ini.
Penyelesaian masalah:
Saya bisa telnet dari NAT ke Server A di port 22. Jadi aksesnya bagus.
Ketika saya menjalankan telnet 54.213.116.251 2222
laptop saya, saya melihat entri di bawah di tcpdump di NAT:
NAT# tcpdump -n -i eth0 dst 10.0.1.243 and port 22
09:59:13.738316 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:59:16.737009 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:59:22.775567 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,nop,sackOK], length 0
Jadi itu berarti iptables mengarahkan paket ke 10.0.1.243
. (BTW, xxx.xxx.xxx.xxx
adalah alamat ip publik laptop saya)
Tetapi ketika saya menjalankan tcpdump di Server A, saya tidak melihat apa pun yang berasal dari 10.0.0.54
alamat IP Internal / Privat NAT ( Dan saya pikir ini masalahnya ):
Server A# tcpdump -n src 10.0.0.54
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
Tetapi jika saya telnet dari NAT instance ke Server A, saya melihat hal-hal bagus di tcpdump di Server A ( Ini artinya, PREROUTING
Aturan saya secara keseluruhan tidak berfungsi seperti yang diharapkan ):
Server A# tcpdump -n src 10.0.0.54
05:01:47.500080 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [S], seq 2862522431, win 14600, options [mss 1460,sackOK,TS val 3013083 ecr 0,nop,wscale 7], length 0
05:01:47.501601 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [.], ack 760676524, win 115, options [nop,nop,TS val 3013083 ecr 12074896], length 0
05:01:47.535720 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [.], ack 22, win 115, options [nop,nop,TS val 3013092 ecr 12074928], length 0
Kesimpulan:
Dari output tcpdump di NAT, Tampaknya Iptables meneruskan paket saya dengan baik.
dari TCP dump di Server A, saya memiliki konektivitas yang baik dari NAT ke Server A.
Tetapi dalam End-to-end, saya tidak dapat terhubung ke server A dari laptop saya.
( BTW, saya tahu terowongan SSH dan hal-hal bagus lainnya. Tapi saya hanya ingin Iptables membantu saya dengan ini. )
sumber
Disabled
untuk contoh NAT.Jawaban:
Akhirnya, aku memecahkannya !!!!
Pada contoh NAT, saya harus mengubah perintah di bawah ini:
Dari:
Untuk:
Dan itu BEKERJA !!!!
Jadi, saya akan segera membuat pertanyaan baru pada ServerFault menanyakan apa kelebihan dan kekurangan dalam menggunakan dua perintah di atas.
sumber
2222
inboud dari0.0.0.0/0
pada grup keamanan untuk kotak nat Anda10.0.1.0
(swasta) subnet harus memiliki aturan tabel rute seperti: Tujuan:0.0.0.0/0
Target: "kotak Nat"10.0.0.0
(publik) subnet harus memiliki aturan tabel rute seperti: Tujuan:0.0.0.0/0
Target: "gateway Internet"Pastikan Anda menonaktifkan Pemeriksaan Sumber / tujuan pada NIC untuk kotak NAT Anda, jangan bersenang-senang tanpa NATting. (Saya tahu Anda sudah memiliki ini tetapi ini sangat penting, jadi sertakan juga untuk beberapa penampil di masa mendatang)
Pastikan paket keluar tahu ke mana harus pergi:
iptables --table nat --append POSTROUTING --source 10.0.0.0/16 --destination 0.0.0.0/0 --jump MASQUERADE
Pastikan paket inboud untuk
2222
dialihkan dengan benar:iptables --table nat --append PREROUTING --protocol tcp --dport 2222 --jump DNAT --to-destination 10.0.1.243:22
sumber
MASQUERADE
Perintah Anda tidak membantu dalam kasus saya. Mungkin saya kehilangan sesuatu. Satu-satunyaMASQUERADE
perintah yang membuat saya terbang adalah yang saya sebutkan dalam jawaban saya .Posting ini banyak membantu saya dalam memahami AWS NAT. Jadi saya mulai menyelidiki apa yang membuatnya
iptables -t nat -A POSTROUTING -j MASQUERADE
bekerja.Yah jawaban saya menemukan pernyataan di atas adalah memungkinkan kotak NAT untuk sumber NAT IP 'LAPTOP' ke '10 .0.0.54 'sementara saat yang sama melakukan NAT tujuan ke 10.0.1.243. Saat ini kotak subnet pribadi adalah permintaan ssh yang berasal dari perangkat NAT saja. Perintah ini sebenarnya mengurangi keamanan server subnet pribadi. Disarankan untuk menggunakan perintah di bawah ini untuk menyempurnakan akses subnet pribadi melalui ssh dan kotak NAT seperti yang disebutkan di bawah ini;
sumber
Sedikit lebih aman:
sumber