Bagaimana cara membuat / mensetup vpn hanya menggunakan SSH?

9

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 68yang 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 80saya 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
..........
Ali
sumber

Jawaban:

4

Alamat sumber paket harus diganti dengan salah satu alamat mesin lokal sehingga jawaban dapat diterima oleh mesin lokal, jika tidak ada alasan (baik) untuk mengirim paket ini ke router berikutnya, jawabannya tidak bisa ditangkap lagi. iptables MASQUERADEdan SNATberguna untuk mengubah alamat sumber dari paket-paket ini:

[user@local ~]$ iptables -t nat -A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.1/30 -j MASQUERADE -o eth0
xin
sumber
Terima kasih atas tanggapannya. Saya menjalankan perintah yang Anda berikan tetapi saya masih mendapat respons yang sama. Saya berlari tcpdump pada eth0 dan tun0. paket tidak dialihkan ke eth0. tun0 masih berusaha menjangkau Google. Apakah saya perlu merutekan paket dari tun0 ke eth0?
Ali
1
Jika mesin lokal menggunakan antarmuka eth0 untuk terhubung ke internet, paket harus pergi ke eth0 bahkan tanpa perintah ini. Jadi mungkin beberapa pengaturan firewall terlibat. Bisakah Anda menaruh iptables-saveoutput dari mesin lokal?
xin
Saya telah menambahkan output iptables-save ke posting asli.
Ali
Firewall harus dimatikan. Saya menjalankan perintah Anda setelah mematikan firewalld, dan koneksi mulai berfungsi! Hargai bantuan Anda! Periksa Catatan di pos asli untuk melihat perkembangan.
Ali
1
kerja bagus. Kelihatannya masalah adalah aturan iptable -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.
xin