Inilah masalah yang saya coba selesaikan. Ada server ("sistem jarak jauh") yang dapat saya ssh dari komputer lokal saya tetapi sistem jarak jauh ini tidak memiliki koneksi internet. Saya ingin memberikan sistem jarak jauh dengan akses ke internet melalui komputer lokal saya menggunakan VPN berbasis ssh. Bagaimana saya mencapai ini? Saya telah mencoba yang berikut ini, yang tampaknya sebagian berfungsi. Yang saya maksud dengan 'sebagian berfungsi' adalah bahwa paket koneksi (paket sinkronisasi) dikirim ke komputer lokal saya tetapi gagal membuat koneksi ke internet. Saya menggunakan tcpdump untuk menangkap paket di komputer lokal. Komputer lokal dan sistem jarak jauh keduanya menjalankan centos 7.
Pengaturan - Catatan: perintah di bawah ini dijalankan secara berurutan. Perintah user @ remote dijalankan di server jarak jauh dan perintah user @ local dijalankan di komputer lokal.
[user @ remote ~] $ ip addr show 1: lo: mtu 65536 qdisc noqueue state TIDAK DIKETAHUI link / loopback 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 host lingkup lo valid_lft selamanya prefer_lft selamanya inet6 :: 1/128 ruang lingkup host valid_lft selamanya prefer_lft selamanya 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 tautan / eter AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 ruang lingkup dinamis global eth0 valid_lft 1785sec prefer_lft 1785sec inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 lingkup global noprefixroute global yang dinamis valid_lft 2591987sec prefer_lft 604787sec inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 lingkup tautan valid_lft selamanya prefer_lft selamanya
[user @ local ~] $ ip addr show 1: lo: mtu 65536 qdisc noqueue state TIDAK DIKETAHUI link / loopback 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 host lingkup lo valid_lft selamanya prefer_lft selamanya inet6 :: 1/128 ruang lingkup host valid_lft selamanya prefer_lft selamanya 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 tautan / eter AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 ruang lingkup dinamis global eth0 valid_lft 1785sec prefer_lft 1785sec inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 lingkup global noprefixroute global yang dinamis valid_lft 2591987sec prefer_lft 604787sec inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 lingkup tautan valid_lft selamanya prefer_lft selamanya
Buat antarmuka tun0 pada sistem jarak jauh .
[user @ remote ~] $ sudo ip selesai menambahkan tun0 mode tun [user @ remote ~] $ ip addr show 1: lo: mtu 65536 qdisc noqueue state TIDAK DIKETAHUI link / loopback 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 host lingkup lo valid_lft selamanya prefer_lft selamanya inet6 :: 1/128 ruang lingkup host valid_lft selamanya prefer_lft selamanya 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 tautan / eter AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 ruang lingkup dinamis global eth0 valid_lft 1785sec prefer_lft 1785sec inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 lingkup global noprefixroute global yang dinamis valid_lft 2591987sec prefer_lft 604787sec inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 lingkup tautan valid_lft selamanya prefer_lft selamanya 3: tun0: mtu 1500 qdisc noop state BAWAH qlen 500 tautan / tidak ada
Buat antarmuka tun0 pada sistem lokal .
[user @ local ~] $ sudo ip selesai menambahkan tun0 mode tun [user @ local ~] $ ip addr show 1: lo: mtu 65536 qdisc noqueue state TIDAK DIKETAHUI link / loopback 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 host lingkup lo valid_lft selamanya prefer_lft selamanya inet6 :: 1/128 ruang lingkup host valid_lft selamanya prefer_lft selamanya 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 tautan / eter AA: BB: CC: DD: EE: FF brd ff: ff: ff: ff: ff: ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255 ruang lingkup dinamis global eth0 valid_lft 1785sec prefer_lft 1785sec inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 lingkup global noprefixroute global yang dinamis valid_lft 2591987sec prefer_lft 604787sec inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 lingkup tautan valid_lft selamanya prefer_lft selamanya 3: tun0: mtu 1500 qdisc noop state BAWAH qlen 500 tautan / tidak ada
Tetapkan alamat ip ke tun0 dan bawa:
[user @ local ~] $ sudo ip addr add 10.0.2.1/30 dev tun0 [user @ local ~] $ sudo ip link atur dev tun0 up [user @ local ~] $ ip addr show tun0 3: tun0: mtu 1500 qdisc pfifo_fast state BAWAH qlen 500 tautan / tidak ada inet 10.0.2.1/30 lingkup global tun0 valid_lft selamanya prefer_lft selamanya
[user @ remote ~] $ sudo ip addr add 10.0.2.2/30 dev tun0 [user @ remote ~] $ sudo ip link atur dev tun0 up [user @ remote ~] $ ip addr show tun0 3: tun0: mtu 1500 qdisc pfifo_fast state BAWAH qlen 500 tautan / tidak ada inet 10.0.2.2/30 lingkup global tun0 valid_lft selamanya prefer_lft selamanya
Ubah sshd_config pada sistem remote dan lokal untuk mengaktifkan tunneling:
[user @ remote ~] $ sudo grep PermitTunnel / etc / ssh / sshd_config Izin point-to-point
[user @ local ~] $ sudo grep PermitTunnel / etc / ssh / sshd_config Izin point-to-point
Buat terowongan ssh:
[user @ local ~] $ sudo ssh -f -w0: 0 root @ remote true kata sandi root @ remote: [user @ local ~] $ ps aux | grep root @ remote root 1851 0.0 0.0 76112 1348? Ss 23:12 0:00 ssh -f -w0: 0 root @ remote true
Uji ping di kedua server menggunakan alamat ip baru:
[user @ local ~] $ ping 10.0.2.2 -c 2 PING 10.0.2.2 (10.0.2.2) 56 (84) byte data. 64 byte dari 10.0.2.2: icmp_seq = 1 ttl = 64 waktu = 1,68 ms 64 byte dari 10.0.2.2: icmp_seq = 2 ttl = 64 waktu = 0,861 ms --- 10.0.2.2 statistik ping --- 2 paket dikirimkan, 2 diterima, kehilangan paket 0%, waktu 1002ms rtt min / avg / max / mdev = 0.861 / 1.274 / 1.688 / 0.415 ms
[user @ remote ~] $ ping 10.0.2.1 -c 2 PING 10.0.2.1 (10.0.2.1) 56 (84) byte data. 64 byte dari 10.0.2.1: icmp_seq = 1 ttl = 64 waktu = 0,589 ms 64 byte dari 10.0.2.1: icmp_seq = 2 ttl = 64 waktu = 0.889 ms --- 10.0.2.1 statistik ping --- 2 paket dikirimkan, 2 diterima, kehilangan paket 0%, waktu 1000 ms rtt min / avg / max / mdev = 0,589 / 0,739 / 0,889 / 0,150 ms
[user @ remote ~] $ route Tabel routing IP kernel Destination Gateway Genmask Flags Metric Ref Use Iface gateway default 0.0.0.0 UG 100 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0 AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [user @ remote ~] $ ip route show default melalui AAA.BBB.CCC.1 dev eth0 proto static metric 100 10.0.2.0/30 dev tun0 proto kernel lingkup tautan src 10.0.2.2 AAA.BBB.CCC.0 / 24 dev eth0 proto kernel lingkup tautan src AAA.BBB.CCC.31 metrik 100
Dapatkan alamat ip google:
[user @ local ~] $ nslookup google.com Server: server Alamat: server # 53 Jawaban tidak resmi: Nama: google.com Alamat: 173.194.219.101 Nama: google.com Alamat: 173.194.219.100 Nama: google.com Alamat: 173.194.219.113 Nama: google.com Alamat: 173.194.219.102 Nama: google.com Alamat: 173.194.219.139 Nama: google.com Alamat: 173.194.219.138
PENTING: Saya menjalankan perintah di atas pada waktu yang berbeda dan mendapatkan hasil yang berbeda. Jangan berasumsi bahwa respons Anda akan sama dengan respons saya untuk nslookup di atas.
Karena semua alamat ip google dimulai dengan 173.194.219, mari rutekan semua alamat ip ini melalui komputer lokal.
[user @ remote ~] $ sudo ip route add 173.194.219.0/24 dev tun0 [user @ remote ~] $ route Tabel routing IP kernel Destination Gateway Genmask Flags Metric Ref Use Iface gateway default 0.0.0.0 UG 100 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0 AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 173.194.219.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 [user @ remote ~] $ ip route show default melalui AAA.BBB.CCC.1 dev eth0 proto static metric 100 10.0.2.0/30 dev tun0 proto kernel lingkup tautan src 10.0.2.2 AAA.BBB.CCC.0 / 24 dev eth0 proto kernel lingkup tautan src AAA.BBB.CCC.31 metrik 100 173.194.219.0/24 dev tun0 scope link
Aktifkan ip_forwarding:
[user @ local ~] $ grep ip_forward /etc/sysctl.conf net.ipv4.ip_forward = 1 [user @ local ~] $ sudo restart jaringan layanan Mulai ulang jaringan (via systemctl): [OK]
Siapkan paket capture di komputer lokal menggunakan tcpdump:
[user @ local ~] $ sudo tcpdump -nn -vv 'port not 22' -i any tcpdump: mendengarkan pada setiap, tipe tautan LINUX_SLL (Linux dimasak), menangkap ukuran 65535 byte
Coba sambungkan ke google dari server jauh.
[user @ remote ~] $ openssl s_client -connect google.com:443 socket: Tidak ada rute ke host terhubung: errno = 113
Segera setelah perintah openssl dijalankan pada server jarak jauh, tcpdump menangkap beberapa paket:
10.0.2.2.52768> 173.194.219.102.443: Bendera [S], cksum 0x8702 (benar), seq 994650730, win 29200, opsi [mss 1460, sackOK, TS val 7701438 ecr 0, nop, wscale 7], panjang 0 00: 49: 33.247753 IP (tos 0x0, ttl 64, id 46037, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.48774> 173.194.219.100.443: Bendera [S], cksum 0x47a7 (benar), seq 2218733674, win 29200, opsi [mss 1460, sackOK, TS val 7701439 ecr 0, nop, wscale 7], panjang 0 00: 49: 33.247883 IP (tos 0xc0, ttl 64, id 9538, offset 0, flag [tidak ada], proto ICMP (1), panjang 88) 10.0.2.1> 10.0.2.2: Host ICMP 173.194.219.100 tidak dapat dijangkau - admin dilarang, panjang 68 IP (tos 0x0, ttl 63, id 46037, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.48774> 173.194.219.100.443: Bendera [S], cksum 0x47a7 (benar), seq 2218733674, win 29200, opsi [mss 1460, sackOK, TS val 7701439 ecr 0, nop, wscale 7], panjang 0 00: 49: 33.253068 IP (tos 0x0, ttl 64, id 26282, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.51312> 173.194.219.101.443: Bendera [S], cksum 0x6ff8 (benar), seq 2634016105, win 29200, opsi [mss 1460, sackOK, TS val 7701443 ecr 0, nop, wscale 7], panjang 0 00: 49: 33.254771 IP (tos 0xc0, ttl 64, id 9539, offset 0, flag [tidak ada], proto ICMP (1), panjang 88) 10.0.2.1> 10.0.2.2: Host ICMP 173.194.219.101 tidak dapat dijangkau - admin dilarang, panjang 68 IP (tos 0x0, ttl 63, id 26282, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.51312> 173.194.219.101.443: Bendera [S], cksum 0x6ff8 (benar), seq 2634016105, win 29200, opsi [mss 1460, sackOK, TS val 7701443 ecr 0, nop, wscale 7], panjang 0 00: 49: 33.258805 IP (tos 0x0, ttl 64, id 9293, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.33686> 173.194.219.139.443: Bendera [S], cksum 0x542b (benar), seq 995927943, win 29200, opsi [mss 1460, sackOK, TS val 7701450 ecr 0, nop, wscale 7], panjang 0 00: 49: 33.258845 IP (tos 0xc0, ttl 64, id 9540, offset 0, flag [tidak ada], proto ICMP (1), panjang 88) 10.0.2.1> 10.0.2.2: Host ICMP 173.194.219.139 tidak dapat dijangkau - admin dilarang, panjang 68 IP (tos 0x0, ttl 63, id 9293, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.33686> 173.194.219.139.443: Bendera [S], cksum 0x542b (benar), seq 995927943, win 29200, opsi [mss 1460, sackOK, TS val 7701450 ecr 0, nop, wscale 7], panjang 0 ^ C 13 paket ditangkap 13 paket diterima oleh filter 0 paket dijatuhkan oleh kernel
Paket-paket yang diambil menggunakan tcpdump menunjukkan bahwa upaya dilakukan untuk membuat koneksi (paket Sync dikirim) tetapi tidak ada yang diterima. Juga ada pesan 10.0.2.1 > 10.0.2.2: ICMP host 173.194.219.139 unreachable - admin prohibited, length 68
yang tampaknya menunjukkan masalah.
Ada saran tentang cara mengatasi masalah ini? Apakah ada aturan iptable yang perlu ditambahkan? Ada masalah firewall (firewall-d?).
Catatan # 1
Output dari iptables-save:
[user @ local ~] $ sudo iptables -t nat -A POSTROUTING -s 10.0.2.2/32! -d 10.0.2.1/30 -j MASQUERADE -o eth0 [user @ local ~] $ sudo iptables-save # Dihasilkan oleh iptables-save v1.4.21 pada Sabtu 15 Apr 01:40:57 2017 * nat : MENERIMA PENERIMAAN [35: 8926] : PENERIMAAN INPUT [1:84] : OUTPUT ACCEPT [6: 439] : PENERIMAAN POSTROUTING [6: 439] : OUTPUT_direct - [0: 0] : POSTROUTING_ZONES - [0: 0] : POSTROUTING_ZONES_SOURCE - [0: 0] : POSTROUTING_direct - [0: 0] : POST_public - [0: 0] : POST_public_allow - [0: 0] : POST_public_deny - [0: 0] : POST_public_log - [0: 0] : PREROUTING_ZONES - [0: 0] : PREROUTING_ZONES_SOURCE - [0: 0] : PREROUTING_direct - [0: 0] : PRE_public - [0: 0] : PRE_public_allow - [0: 0] : PRE_public_deny - [0: 0] : PRE_public_log - [0: 0] -A PREROUTING -j PREROUTING_direct -A PREROUTING -j PREROUTING_ZONES_SOURCE -A PREROUTING -j PREROUTING_ZONES -A OUTPUT -j OUTPUT_direct -A POSTROUTING -j POSTROUTING_direct -A POSTROUTING -j POSTROUTING_ZONES_SOURCE -A POSTROUTING -j POSTROUTING_ZONES -Sebuah POSTROUTING -s 10.0.2.2/32! -d 10.0.2.0/30 -j MASQUERADE -A POSTROUTING_ZONES -o eth0 -g POST_public -A POSTROUTING_ZONES -g POST_publik -A POST_public -j POST_public_log -A POST_public -j POST_public_deny -A POST_public -j POST_public_allow -A PREROUTING_ZONES -i eth0 -g PRE_public -A PREROUTING_ZONES -g PRE_publik -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow MELAKUKAN # Diselesaikan pada Sabtu 15 Apr 01:40:57 2017 # Dihasilkan oleh iptables-save v1.4.21 pada Sabtu 15 Apr 01:40:57 2017 *mengoyakkan : MENERIMA PENERIMAAN [169: 18687] : INPUT ACCEPT [144: 11583] : FORWARD ACCEPT [0: 0] : OUTPUT ACCEPT [80: 8149] : PENERIMAAN POSTROUTING [80: 8149] : FORWARD_direct - [0: 0] : INPUT_direct - [0: 0] : OUTPUT_direct - [0: 0] : POSTROUTING_direct - [0: 0] : PREROUTING_ZONES - [0: 0] : PREROUTING_ZONES_SOURCE - [0: 0] : PREROUTING_direct - [0: 0] : PRE_public - [0: 0] : PRE_public_allow - [0: 0] : PRE_public_deny - [0: 0] : PRE_public_log - [0: 0] -A PREROUTING -j PREROUTING_direct -A PREROUTING -j PREROUTING_ZONES_SOURCE -A PREROUTING -j PREROUTING_ZONES -A INPUT -j INPUT_direct -A FORWARD -j FORWARD_direct -A OUTPUT -j OUTPUT_direct -A POSTROUTING -j POSTROUTING_direct -A PREROUTING_ZONES -i eth0 -g PRE_public -A PREROUTING_ZONES -g PRE_publik -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow MELAKUKAN # Diselesaikan pada Sabtu 15 Apr 01:40:57 2017 # Dihasilkan oleh iptables-save v1.4.21 pada Sabtu 15 Apr 01:40:57 2017 *keamanan : INPUT ACCEPT [2197: 163931] : FORWARD ACCEPT [0: 0] : OUTPUT ACCEPT [1229: 185742] : FORWARD_direct - [0: 0] : INPUT_direct - [0: 0] : OUTPUT_direct - [0: 0] -A INPUT -j INPUT_direct -A FORWARD -j FORWARD_direct -A OUTPUT -j OUTPUT_direct MELAKUKAN # Diselesaikan pada Sabtu 15 Apr 01:40:57 2017 # Dihasilkan oleh iptables-save v1.4.21 pada Sabtu 15 Apr 01:40:57 2017 *mentah : MENERIMA PENERIMAAN [2362: 184437] : OUTPUT ACCEPT [1229: 185742] : OUTPUT_direct - [0: 0] : PREROUTING_direct - [0: 0] -A PREROUTING -j PREROUTING_direct -A OUTPUT -j OUTPUT_direct MELAKUKAN # Diselesaikan pada Sabtu 15 Apr 01:40:57 2017 # Dihasilkan oleh iptables-save v1.4.21 pada Sabtu 15 Apr 01:40:57 2017 *Saring : INPUT ACCEPT [0: 0] : FORWARD ACCEPT [0: 0] : OUTPUT ACCEPT [80: 8149] : FORWARD_IN_ZONES - [0: 0] : FORWARD_IN_ZONES_SOURCE - [0: 0] : FORWARD_OUT_ZONES - [0: 0] : FORWARD_OUT_ZONES_SOURCE - [0: 0] : FORWARD_direct - [0: 0] : FWDI_public - [0: 0] : FWDI_public_allow - [0: 0] : FWDI_public_deny - [0: 0] : FWDI_public_log - [0: 0] : FWDO_public - [0: 0] : FWDO_public_allow - [0: 0] : FWDO_public_deny - [0: 0] : FWDO_public_log - [0: 0] : INPUT_ZONES - [0: 0] : INPUT_ZONES_SOURCE - [0: 0] : INPUT_direct - [0: 0] : IN_public - [0: 0] : IN_public_allow - [0: 0] : IN_public_deny - [0: 0] : IN_public_log - [0: 0] : OUTPUT_direct - [0: 0] -A INPUT -m conntrack --ctstate TERKAIT, DIDIRIKAN -j MENERIMA INPUT -A lo -j MENERIMA -A INPUT -j INPUT_direct -A INPUT -j INPUT_ZONES_SOURCE -A INPUT -j INPUT_ZONES -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -j TOLAKAN - menolak-dengan icmp-host-dilarang -Sebuah ke depan -m conntrack --ctstate TERKAIT, DIDIRIKAN -j MENERIMA -Sebuah ke depan -i lo -j MENERIMA -A FORWARD -j FORWARD_direct -SUARA KE DEPAN -j FORWARD_IN_ZONES_SOURCE -A FORWARD -j FORWARD_IN_ZONES -SUARA KE DEPAN -J FORWARD_OUT_ZONES_SOURCE -LAH MAJU -j FORWARD_OUT_ZONES -Sebuah ke depan -m conntrack --ctstate INVALID -j DROP -SUANG KE DEPAN -J TOLAK - menolak-dengan icmp-host-dilarang -A OUTPUT -j OUTPUT_direct -A FORWARD_IN_ZONES -i eth0 -g FWDI_public -A FORWARD_IN_ZONES -g FWDI_publik -A FORWARD_OUT_ZONES -o eth0 -g FWDO_publik -A FORWARD_OUT_ZONES -g FWDO_public -A FWDI_public -j FWDI_public_log -A FWDI_public -j FWDI_public_deny -A FWDI_public -j FWDI_public_allow -A FWDI_publik -p icmp -j MENERIMA -A FWDO_public -j FWDO_public_log -A FWDO_public -j FWDO_public_deny -A FWDO_public -j FWDO_public_allow -A INPUT_ZONES -i eth0 -g IN_public -A INPUT_ZONES -g IN_public -A IN_public -j IN_public_log -A IN_public -j IN_public_deny -A IN_public -j IN_public_allow -A IN_public -p icmp -j ACCEPT -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT MELAKUKAN # Diselesaikan pada Sabtu 15 Apr 01:40:57 2017
Catatan # 2:
Saya menyiapkan server web apache pada host terpisah yang hanya dapat diakses oleh server lokal. Saya berlari tcpdump di server web mendengarkan pada port 80. Ketika saya menjalankan
telnet webserver 80
saya menangkap paket-paket berikut. Ini adalah perilaku yang diharapkan sejak Koneksi TCP dibuat (S, S-Ack, Ack).
[user @ webserver ~] $ sudo tcpdump -nn -vv 'port bukan 22 dan 80' -i eth0 tcpdump: mendengarkan pada eth0, tipe tautan EN10MB (Ethernet), menangkap ukuran 65535 byte 07: 17: 30.411474 IP (tos 0x10, ttl 64, id 34376, offset 0, flag [DF], proto TCP (6), panjang 60) local.server.46710> web.server.80: Bendera [S], cksum 0x8412 (salah -> 0x6d96), seq 3018586542, win 29200, opsi [mss 1460, sackOK, TS val 3047398 ecr 0, nop, wscale 7] , panjang 0 07: 17: 30.411557 IP (tos 0x0, ttl 64, id 0, offset 0, flag [DF], proto TCP (6), panjang 60) web.server.80> local.server.46710: Bendera [S.], cksum 0x8412 (salah -> 0x9114), seq 2651711943, ack 3018586543, menang 28960, pilihan [mss 1460, sackOK, TS val 37704524 ecr 3047398, nop , wscale 7], panjang 0 07: 17: 30.411725 IP (tos 0x10, ttl 64, id 34377, offset 0, flag [DF], proto TCP (6), panjang 52) local.server.46710> web.server.80: Flags [.], cksum 0x840a (salah -> 0x301c), seq 1, ack 1, win 229, opsi [nop, nop, TS val 3047398 ecr 37704524], panjang 0
Ketika saya mencoba untuk terhubung ke server web dari server jarak jauh melalui server lokal, tcpdump di server web tidak menangkap paket apa pun (bahkan Sync awal) tetapi server lokal menangkap paket Sync yang dikirim ke server web (lihat di bawah). Ini membuat saya percaya bahwa ada sesuatu yang mencegah paket dikirim ke server web - mungkin kesalahan konfigurasi atau firewall.
[user @ local ~] $ sudo tcpdump -nn -vv 'port bukan 22 dan 80' -i any tcpdump: mendengarkan pada setiap, tipe tautan LINUX_SLL (Linux dimasak), menangkap ukuran 65535 byte 02: 24: 09.135842 IP (tos 0x10, ttl 64, id 38062, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.50558> web.server.80: Bendera [S], cksum 0x668d (benar), seq 69756226, win 29200, opsi [mss 1460, sackOK, TS val 4780524 ecr 0, nop, wscale 7], panjang 0
PENTING: paket-paket tidak dirutekan melalui eth0 tetapi upaya dilakukan untuk mengirim paket ke server web melalui tun0 (yang gagal). Saya dapat mengkonfirmasi ini dengan menjalankan tcpdump pada antarmuka tun0:
[user @ local ~] $ sudo tcpdump -nn -vv 'port bukan 22 dan 80' -i tun0 tcpdump: mendengarkan pada tun0, tipe tautan RAW (Raw IP), menangkap ukuran 65535 byte 02: 28: 10.295972 IP (tos 0x10, ttl 64, id 46976, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.50560> server web.80: Bendera [S], cksum 0xd560 (benar), seq 605366388, win 29200, opsi [mss 1460, sackOK, TS val 5021684 ecr 0, nop, wscale 7], panjang 0
Catatan # 3:
Saya mematikan firewalld di komputer lokal dan paket Sync diterima oleh server web.
[user @ local ~] $ sudo systemctl stop firewalld
[user @ webserver ~] $ sudo tcpdump -nn -vv 'port bukan 22 dan 80' -i eth0 tcpdump: mendengarkan pada eth0, tipe tautan EN10MB (Ethernet), menangkap ukuran 65535 byte 08: 25: 17.390912 IP (tos 0x10, ttl 63, id 61767, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.50580> web.server.80: Bendera [S], cksum 0x30dc (benar), seq 2601927549, win 29200, opsi [mss 1460, sackOK, TS val 7123514 ecr 0, nop, wscale 7], panjang 0 08: 25: 17.391003 IP (tos 0x0, ttl 64, id 0, offset 0, flag [DF], proto TCP (6), panjang 60) web.server.80> 10.0.2.2.50580: Bendera [S.], cksum 0x4e23 (salah -> 0xa316), seq 959115533, ack 2601927550, menang 28960, pilihan [mss 1460, sackOK, TS val 41771503 ecr 7123514, nop , wscale 7], panjang 0 08: 25: 17.391192 IP (tos 0x0, ttl 128, id 60032, offset 0, flag [tidak ada], proto TCP (6), panjang 40) 10.0.2.2.50580> web.server.80: Bendera [R], cksum 0x7339 (benar), seq 2601927550, win 8192, panjang 0 08: 25: 18.393794 IP (tos 0x10, ttl 63, id 61768, offset 0, flag [DF], proto TCP (6), panjang 60) 10.0.2.2.50580> web.server.80: Bendera [S], cksum 0x2cf1 (benar), seq 2601927549, win 29200, opsi [mss 1460, sackOK, TS val 7124517 ecr 0, nop, wscale 7], panjang 0 08: 25: 18.393898 IP (tos 0x0, ttl 64, id 0, offset 0, flag [DF], proto TCP (6), panjang 60) web.server.80> 10.0.2.2.50580: Bendera [S.], cksum 0x4e23 (salah -> 0x7e71), seq 974785773, ack 2601927550, menang 28960, pilihan [mss 1460, sackOK, TS val 41772506 ecr 7124517, tidak , wscale 7], panjang 0 08: 25: 18.394003 IP (tos 0x0, ttl 128, id 60033, offset 0, flag [tidak ada], proto TCP (6), panjang 40) 10.0.2.2.50580> web.server.80: Bendera [R], cksum 0x566a (benar), seq 2601927550, win 8192, panjang 0
Sekarang jelas, IP sumber perlu diperbarui agar sesuai dengan alamat ip server lokal sebelum paket dikirim ke server web. Seperti yang disarankan @xin, NAT perlu diatur di server lokal.
Catatan # 4:
Setelah saya mencoba untuk terhubung ke server web, saya dapat melihat bahwa pkts menghitung untuk aturan 9 naik 1 (seperti yang terlihat di bawah).
[user @ local ~] $ sudo iptables -nvL --line-numbers .......... Chain FORWARD (polis MENERIMA 0 paket, 0 byte) num pkts byte target prot opt in out source destination 1 0 0 MENERIMA semua - * * 0.0.0.0/0 0.0.0.0/0 ctstate TERKAIT, DIDIRIKAN 2 0 0 MENERIMA semua - lo * 0.0.0.0/0 0.0.0.0/0 3 1 60 FORWARD_direct all - * * 0.0.0.0/0 0.0.0.0/0 4 1 60 FORWARD_IN_ZONES_SOURCE semuanya - * * 0.0.0.0/0 0.0.0.0/0 5 1 60 FORWARD_IN_ZONES all - * * 0.0.0.0/0 0.0.0.0/0 6 1 60 FORWARD_OUT_ZONES_SOURCE semua - * * 0.0.0.0/0 0.0.0.0/0 7 1 60 FORWARD_OUT_ZONES semua - * * 0.0.0.0/0 0.0.0.0/0 8 0 0 DROP semua - * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID 9 1 60 TOLONG semua - * * 0.0.0.0/0 0.0.0.0/0 ditolak-dengan icmp-host-dilarang .......... [user @ local ~] $ sudo iptables -D FORWARD 9
Setelah aturan 9 dari rantai FORWARD dihapus (dari atas, seperti yang disarankan @xin), saya dapat terhubung ke server web.
[user @ local ~] $ sudo iptables -nvL --line-numbers .......... Chain FORWARD (polis MENERIMA 1 paket, 60 byte) num pkts byte target prot opt in out source destination 1 12 5857 MENERIMA semua - * * 0.0.0.0/0 0.0.0.0/0 ctstate TERKAIT, DIDIRIKAN 2 0 0 MENERIMA semua - lo * 0.0.0.0/0 0.0.0.0/0 3 2 120 FORWARD_direct all - * * 0.0.0.0/0 0.0.0.0/0 4 2 120 FORWARD_IN_ZONES_SOURCE semuanya - * * 0.0.0.0/0 0.0.0.0/0 5 2 120 FORWARD_IN_ZONES all - * * 0.0.0.0/0 0.0.0.0/0 6 2 120 FORWARD_OUT_ZONES_SOURCE semua - * * 0.0.0.0/0 0.0.0.0/0 7 2 120 FORWARD_OUT_ZONES all - * * 0.0.0.0/0 0.0.0.0/0 8 0 0 DROP semua - * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID ..........
iptables-save
output dari mesin lokal?-A FORWARD -j REJECT --reject-with icmp-host-prohibited
. paket yang datang ke mesin Anda dan memiliki alamat tujuan dari mesin Anda, akan pergi ke rantai FORWARD, jadi jatuhkan aturan ini.