これが私が解決しようとしている問題です。ローカルコンピューターからSSH接続できるサーバー(「リモートシステム」)がありますが、このリモートシステムはインターネットに接続していません。リモートシステムに、sshベースのVPNを使用してローカルコンピューターからインターネットにアクセスできるようにしたいと考えています。どうすればこれを達成できますか?次のことを試しましたが、部分的にはうまくいくようです。「部分的に機能する」とは、接続パケット(同期パケット)がローカルコンピューターに送信されても、インターネットへの接続を確立できないことです。ローカルコンピューター上のパケットをキャプチャするためにtcpdumpを使用しています。ローカルコンピューターとリモートシステムはどちらもcentos 7を実行しています。
セットアップ -注:以下のコマンドは順番に実行されます。user @ remoteコマンドはリモートサーバーで実行され、user @ localコマンドはローカルコンピューターで実行されます。
[user @ remote〜] $ ip addr show 1:lo:mtu 65536 qdisc noqueue状態不明 リンク/ループバック00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8スコープホストlo valid_lft forever preferred_lft forever inet6 :: 1/128スコープホスト valid_lft forever preferred_lft forever 2:eth0:mtu 1500 qdisc pfifo_fast状態UP qlen 1000 リンク/エーテルAA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255スコープグローバルダイナミックeth0 valid_lft 1785秒preferred_lft 1785秒 inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL / 64スコープグローバルnoprefixrouteダイナミック valid_lft 2591987秒preferred_lft 604787秒 inet6 ABCD :: IIII:JJJJ:KKKK:LLLL / 64スコープリンク valid_lft forever preferred_lft forever
[user @ local〜] $ ip addr show 1:lo:mtu 65536 qdisc noqueue状態不明 リンク/ループバック00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8スコープホストlo valid_lft forever preferred_lft forever inet6 :: 1/128スコープホスト valid_lft forever preferred_lft forever 2:eth0:mtu 1500 qdisc pfifo_fast状態UP qlen 1000 リンク/エーテルAA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255スコープグローバルダイナミックeth0 valid_lft 1785秒preferred_lft 1785秒 inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL / 64スコープグローバルnoprefixrouteダイナミック valid_lft 2591987秒preferred_lft 604787秒 inet6 ABCD :: IIII:JJJJ:KKKK:LLLL / 64スコープリンク valid_lft forever preferred_lft forever
リモートシステムにtun0インターフェイスを作成します。
[user @ remote〜] $ sudo ip tuntap add tun0 mode tun [user @ remote〜] $ ip addr show 1:lo:mtu 65536 qdisc noqueue状態不明 リンク/ループバック00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8スコープホストlo valid_lft forever preferred_lft forever inet6 :: 1/128スコープホスト valid_lft forever preferred_lft forever 2:eth0:mtu 1500 qdisc pfifo_fast状態UP qlen 1000 リンク/エーテルAA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255スコープグローバルダイナミックeth0 valid_lft 1785秒preferred_lft 1785秒 inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL / 64スコープグローバルnoprefixrouteダイナミック valid_lft 2591987秒preferred_lft 604787秒 inet6 ABCD :: IIII:JJJJ:KKKK:LLLL / 64スコープリンク valid_lft forever preferred_lft forever 3:tun0:mtu 1500 qdisc noop状態DOWN qlen 500 リンク/なし
ローカルシステムにtun0インターフェイスを作成します。
[user @ local〜] $ sudo ip tuntap add tun0 mode tun [user @ local〜] $ ip addr show 1:lo:mtu 65536 qdisc noqueue状態不明 リンク/ループバック00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8スコープホストlo valid_lft forever preferred_lft forever inet6 :: 1/128スコープホスト valid_lft forever preferred_lft forever 2:eth0:mtu 1500 qdisc pfifo_fast状態UP qlen 1000 リンク/エーテルAA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff inet AAA.BBB.CCC.DDD / 24 brd AAA.BBB.CCC.255スコープグローバルダイナミックeth0 valid_lft 1785秒preferred_lft 1785秒 inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL / 64スコープグローバルnoprefixrouteダイナミック valid_lft 2591987秒preferred_lft 604787秒 inet6 ABCD :: IIII:JJJJ:KKKK:LLLL / 64スコープリンク valid_lft forever preferred_lft forever 3:tun0:mtu 1500 qdisc noop状態DOWN qlen 500 リンク/なし
tun0にIPアドレスを割り当てて起動します。
[user @ local〜] $ sudo ip addr add 10.0.2.1/30 dev tun0 [user @ local〜] $ sudo ip link set dev tun0 up [user @ local〜] $ ip addr show tun0 3:tun0:mtu 1500 qdisc pfifo_fast状態DOWN qlen 500 リンク/なし inet 10.0.2.1/30スコープのグローバルtun0 valid_lft forever preferred_lft forever
[user @ remote〜] $ sudo ip addr add 10.0.2.2/30 dev tun0 [user @ remote〜] $ sudo ip link set dev tun0 up [user @ remote〜] $ ip addr show tun0 3:tun0:mtu 1500 qdisc pfifo_fast状態DOWN qlen 500 リンク/なし inet 10.0.2.2/30スコープグローバルtun0 valid_lft forever preferred_lft forever
リモートシステムとローカルシステムの両方でsshd_configを変更して、トンネリングを有効にします。
[user @ remote〜] $ sudo grep PermitTunnel / etc / ssh / sshd_config PermitTunnelポイントツーポイント
[user @ local〜] $ sudo grep PermitTunnel / etc / ssh / sshd_config PermitTunnelポイントツーポイント
sshトンネルを作成します。
[user @ local〜] $ sudo ssh -f -w0:0 root @ remote true root @ remoteのパスワード: [user @ local〜] $ ps aux | grep root @ remote ルート1851 0.0 0.0 76112 1348?Ss 23:12 0:00 ssh -f -w0:0 root @ remote true
新しいIPアドレスを使用して、両方のサーバーでpingをテストします。
[user @ local〜] $ ping 10.0.2.2 -c 2 PING 10.0.2.2(10.0.2.2)56(84)バイトのデータ。 10.0.2.2から64バイト:icmp_seq = 1 ttl = 64 time = 1.68 ms 10.0.2.2から64バイト:icmp_seq = 2 ttl = 64 time = 0.861 ms --- 10.0.2.2 ping統計--- 送信2パケット、受信2、パケット損失0%、時間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)バイトのデータ。 10.0.2.1から64バイト:icmp_seq = 1 ttl = 64 time = 0.589 ms 10.0.2.1から64バイト:icmp_seq = 2 ttl = 64 time = 0.889 ms --- 10.0.2.1 ping統計--- 送信2パケット、受信2、パケット損失0%、時間1000ms rtt min / avg / max / mdev = 0.589 / 0.739 / 0.889 / 0.150 ms
[user @ remote〜] $ルート カーネルIPルーティングテーブル 宛先ゲートウェイのGenmaskフラグメトリックRef Use Iface デフォルトゲートウェイ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 AAA.BBB.CCC.1 dev eth0 proto静的メトリックによるデフォルト100 10.0.2.0/30 dev tun0 protoカーネルスコープリンクsrc 10.0.2.2 AAA.BBB.CCC.0 / 24 dev eth0 protoカーネルスコープリンクsrc AAA.BBB.CCC.31メトリック100
Google IPアドレスを取得します。
[user @ local〜] $ nslookup google.com サーバー:サーバー アドレス:server#53 権威のない答え: 名前:google.com 住所:173.194.219.101 名前:google.com 住所:173.194.219.100 名前:google.com 住所:173.194.219.113 名前:google.com 住所:173.194.219.102 名前:google.com 住所:173.194.219.139 名前:google.com 住所:173.194.219.138
重要: 上記のコマンドを別の時間に実行すると、別の結果が得られました。あなたの応答が上記のnslookupに対する私のものと同じであると想定しないでください。
GoogleのすべてのIPアドレスは173.194.219で始まるため、これらすべてのIPアドレスをローカルコンピューター経由でルーティングします。
[user @ remote〜] $ sudo ip route add 173.194.219.0/24 dev tun0 [user @ remote〜] $ルート カーネルIPルーティングテーブル 宛先ゲートウェイのGenmaskフラグメトリックRef Use Iface デフォルトゲートウェイ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 AAA.BBB.CCC.1 dev eth0 proto静的メトリックによるデフォルト100 10.0.2.0/30 dev tun0 protoカーネルスコープリンクsrc 10.0.2.2 AAA.BBB.CCC.0 / 24 dev eth0 protoカーネルスコープリンクsrc AAA.BBB.CCC.31メトリック100 173.194.219.0/24 dev tun0スコープリンク
ip_forwardingを有効にします。
[user @ local〜] $ grep ip_forward /etc/sysctl.conf net.ipv4.ip_forward = 1 [user @ local〜] $ sudo service network restart (systemctl経由で)ネットワークを再起動しています:[OK]
tcpdumpを使用してローカルコンピュータにパケットキャプチャを設定します。
[user @ local〜] $ sudo tcpdump -nn -vv 'port not 22' -i any tcpdump:任意のリンクタイプLINUX_SLL(Linuxクック)でリッスン、キャプチャサイズ65535バイト
リモートサーバーからGoogleに接続してみます。
[user @ remote〜] $ openssl s_client -connect google.com:443 ソケット:ホストへのルートがありません 接続:errno = 113
opensslコマンドがリモートサーバーで実行されるとすぐに、tcpdumpはいくつかのパケットをキャプチャします。
10.0.2.2.52768> 173.194.219.102.443:フラグ[S]、cksum 0x8702(正解)、seq 994650730、win 29200、オプション[mss 1460、sackOK、TS val 7701438 ecr 0、nop、wscale 7]、長さ0 00:49:33.247753 IP(tos 0x0、ttl 64、id 46037、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.48774> 173.194.219.100.443:フラグ[S]、cksum 0x47a7(正しい)、seq 2218733674、win 29200、オプション[mss 1460、sackOK、TS val 7701439 ecr 0、nop、wscale 7]、長さ0 00:49:33.247883 IP(tos 0xc0、ttl 64、id 9538、オフセット0、フラグ[なし]、プロトコルICMP(1)、長さ88) 10.0.2.1> 10.0.2.2:ICMPホスト173.194.219.100に到達できません-管理禁止、長さ68 IP(tos 0x0、ttl 63、id 46037、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.48774> 173.194.219.100.443:フラグ[S]、cksum 0x47a7(正しい)、seq 2218733674、win 29200、オプション[mss 1460、sackOK、TS val 7701439 ecr 0、nop、wscale 7]、長さ0 00:49:33.253068 IP(tos 0x0、ttl 64、id 26282、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.51312> 173.194.219.101.443:フラグ[S]、cksum 0x6ff8(正しい)、seq 2634016105、win 29200、オプション[mss 1460、sackOK、TS val 7701443 ecr 0、nop、wscale 7]、長さ0 00:49:33.254771 IP(tos 0xc0、ttl 64、id 9539、オフセット0、フラグ[なし]、プロトコルICMP(1)、長さ88) 10.0.2.1> 10.0.2.2:ICMPホスト173.194.219.101到達不能-管理禁止、長さ68 IP(tos 0x0、ttl 63、id 26282、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.51312> 173.194.219.101.443:フラグ[S]、cksum 0x6ff8(正しい)、seq 2634016105、win 29200、オプション[mss 1460、sackOK、TS val 7701443 ecr 0、nop、wscale 7]、長さ0 00:49:33.258805 IP(tos 0x0、ttl 64、id 9293、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.33686> 173.194.219.139.443:フラグ[S]、cksum 0x542b(正解)、シーケンス995927943、勝利29200、オプション[mss 1460、sackOK、TS val 7701450 ecr 0、nop、wscale 7]、長さ0 00:49:33.258845 IP(tos 0xc0、ttl 64、id 9540、オフセット0、フラグ[なし]、プロトコルICMP(1)、長さ88) 10.0.2.1> 10.0.2.2:ICMPホスト173.194.219.139到達不能-管理禁止、長さ68 IP(tos 0x0、ttl 63、id 9293、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.33686> 173.194.219.139.443:フラグ[S]、cksum 0x542b(正解)、シーケンス995927943、勝利29200、オプション[mss 1460、sackOK、TS val 7701450 ecr 0、nop、wscale 7]、長さ0 ^ C キャプチャされた13パケット フィルターで受信した13パケット カーネルによってドロップされた0パケット
tcpdumpを使用してキャプチャされたパケットは、接続を確立しようとする試み(同期パケットが送信される)が何も受信されないことを示唆しています。また10.0.2.1 > 10.0.2.2: ICMP host 173.194.219.139 unreachable - admin prohibited, length 68
、問題を示唆するように思われるメッセージもあります。
この問題を回避する方法に関する提案はありますか?追加する必要があるiptableルールはありますか?ファイアウォールの問題(firewall-d?)。
注#1
iptables-saveからの出力:
[user @ local〜] $ sudo iptables -t nat -A POSTROUTING -s 10.0.2.2/32!-d 10.0.2.1/30 -jマスカレード-o eth0 [user @ local〜] $ sudo iptables-save #2017年4月15日01:40:57にiptables-save v1.4.21によって生成 * nat :PREROUTING ACCEPT [35:8926] :INPUT ACCEPT [1:84] :OUTPUT ACCEPT [6:439] :受入承認[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 -A POSTROUTING -s 10.0.2.2/32!-d 10.0.2.0/30 -jマスカレード -A POSTROUTING_ZONES -o eth0 -g POST_public -A POSTROUTING_ZONES -g POST_public -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_public -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow コミット #2017年4月15日土曜日01:40:57に完了 #2017年4月15日01:40:57にiptables-save v1.4.21によって生成 *マングル :PREROUTING ACCEPT [169:18687] :INPUT ACCEPT [144:11583] :フォワードアクセプト[0:0] :OUTPUT ACCEPT [80:8149] :POSTROUTING ACCEPT [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フォワード-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_public -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow コミット #2017年4月15日土曜日01:40:57に完了 #2017年4月15日01:40:57にiptables-save v1.4.21によって生成 *セキュリティ :INPUT ACCEPT [2197:163931] :フォワードアクセプト[0:0] :OUTPUT ACCEPT [1229:185742] :FORWARD_direct-[0:0] :INPUT_direct-[0:0] :OUTPUT_direct-[0:0] -A INPUT -j INPUT_direct -Aフォワード-j FORWARD_direct -A OUTPUT -j OUTPUT_direct コミット #2017年4月15日土曜日01:40:57に完了 #2017年4月15日01:40:57にiptables-save v1.4.21によって生成 *生 :PREROUTING ACCEPT [2362:184437] :OUTPUT ACCEPT [1229:185742] :OUTPUT_direct-[0:0] :PREROUTING_direct-[0:0] -A PREROUTING -j PREROUTING_direct -A OUTPUT -j OUTPUT_direct コミット #2017年4月15日土曜日01:40:57に完了 #2017年4月15日01:40:57にiptables-save v1.4.21によって生成 *フィルタ :INPUT ACCEPT [0:0] :フォワードアクセプト[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 RELATED、ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -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 REJECT --icmp-host-prohibitedでの拒否 -A転送-m conntrack --ctstate関連、確立-J ACCEPT -A FORWARD -i lo -j ACCEPT -Aフォワード-j FORWARD_direct -Aフォワード-j FORWARD_IN_ZONES_SOURCE -Aフォワード-j FORWARD_IN_ZONES -Aフォワード-j FORWARD_OUT_ZONES_SOURCE -Aフォワード-j FORWARD_OUT_ZONES -A転送-m conntrack --ctstate無効-jドロップ -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -j OUTPUT_direct -A FORWARD_IN_ZONES -i eth0 -g FWDI_public -A FORWARD_IN_ZONES -g FWDI_public -A FORWARD_OUT_ZONES -o eth0 -g FWDO_public -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_public -p icmp -j ACCEPT -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 コミット #2017年4月15日土曜日01:40:57に完了
注2:
ローカルサーバーのみがアクセスできる別のホストにApache Webサーバーをセットアップしました。ポート80でリッスンしているWebサーバーでtcpdumpを実行しました
telnet webserver 80
。実行すると、次のパケットがキャプチャされます。TCP接続が確立されているため、これは予想される動作です(S、S-Ack、Ack)。
[user @ webserver〜] $ sudo tcpdump -nn -vv 'port not 22 and 80' -i eth0 tcpdump:eth0でリッスン、リンクタイプEN10MB(イーサネット)、キャプチャサイズ65535バイト 07:17:30.411474 IP(tos 0x10、ttl 64、id 34376、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) local.server.46710> web.server.80:フラグ[S]、cksum 0x8412(不正-> 0x6d96)、seq 3018586542、win 29200、オプション[mss 1460、sackOK、TS val 3047398 ecr 0、nop、wscale 7] 、長さ0 07:17:30.411557 IP(tos 0x0、ttl 64、id 0、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) web.server.80> local.server.46710:Flags [S.]、cksum 0x8412(incorrect-> 0x9114)、seq 2651711943、ack 3018586543、win 28960、options [mss 1460、sackOK、TS val 37704524 ecr 3047398、nop 、wscale 7]、長さ0 07:17:30.411725 IP(tos 0x10、ttl 64、id 34377、オフセット0、フラグ[DF]、proto TCP(6)、長さ52) local.server.46710> web.server.80:フラグ[。]、cksum 0x840a(不正-> 0x301c)、seq 1、ack 1、win 229、オプション[nop、nop、TS val 3047398 ecr 37704524]、長さ0
ローカルサーバーを介してリモートサーバーからWebサーバーに接続しようとすると、Webサーバーのtcpdumpはパケットをキャプチャしません(初期同期も含めません)が、ローカルサーバーはWebサーバーに送信される同期パケットをキャプチャします(以下を参照)。これにより、何らかの原因でパケットがWebサーバーに送信されないようになっていると考えられます。
[user @ local〜] $ sudo tcpdump -nn -vv 'port not 22 and 80' -i any tcpdump:任意のリンクタイプLINUX_SLL(Linuxクック)でリッスン、キャプチャサイズ65535バイト 02:24:09.135842 IP(tos 0x10、ttl 64、id 38062、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.50558> web.server.80:フラグ[S]、cksum 0x668d(正解)、seq 69756226、win 29200、オプション[mss 1460、sackOK、TS val 4780524 ecr 0、nop、wscale 7]、長さ0
重要:パケットはeth0経由でルーティングされていませんが、代わりにtun0経由でパケットをWebサーバーに送信しようとします(失敗します)。これを確認するには、tun0インターフェイスでtcpdumpを実行します。
[user @ local〜] $ sudo tcpdump -nn -vv 'port not 22 and 80' -i tun0 tcpdump:tun0でリッスン、リンクタイプRAW(Raw IP)、キャプチャサイズ65535バイト 02:28:10.295972 IP(tos 0x10、ttl 64、id 46976、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.50560> webserver.80:フラグ[S]、cksum 0xd560(正解)、seq 605366388、win 29200、オプション[mss 1460、sackOK、TS val 5021684 ecr 0、nop、wscale 7]、長さ0
注意#3:
ローカルコンピューターでファイアウォールをオフにしたところ、同期パケットがWebサーバーで受信されました。
[user @ local〜] $ sudo systemctl stop firewalld
[user @ webserver〜] $ sudo tcpdump -nn -vv 'port not 22 and 80' -i eth0 tcpdump:eth0でリッスン、リンクタイプEN10MB(イーサネット)、キャプチャサイズ65535バイト 08:25:17.390912 IP(tos 0x10、ttl 63、id 61767、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.50580> web.server.80:フラグ[S]、cksum 0x30dc(正解)、seq 2601927549、win 29200、オプション[mss 1460、sackOK、TS val 7123514 ecr 0、nop、wscale 7]、長さ0 08:25:17.391003 IP(tos 0x0、ttl 64、id 0、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) web.server.80> 10.0.2.2.50580:フラグ[S。]、cksum 0x4e23(不正-> 0xa316)、seq 959115533、ack 2601927550、win 28960、オプション[mss 1460、sackOK、TS val 41771503 ecr 7123514、nop 、wscale 7]、長さ0 08:25:17.391192 IP(tos 0x0、ttl 128、id 60032、オフセット0、フラグ[なし]、プロトコルTCP(6)、長さ40) 10.0.2.2.50580> web.server.80:フラグ[R]、cksum 0x7339(正解)、seq 2601927550、win 8192、長さ0 08:25:18.393794 IP(tos 0x10、ttl 63、id 61768、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) 10.0.2.2.50580> web.server.80:フラグ[S]、cksum 0x2cf1(正解)、seq 2601927549、win 29200、オプション[mss 1460、sackOK、TS val 7124517 ecr 0、nop、wscale 7]、長さ0 08:25:18.393898 IP(tos 0x0、ttl 64、id 0、オフセット0、フラグ[DF]、proto TCP(6)、長さ60) web.server.80> 10.0.2.2.50580:フラグ[S。]、cksum 0x4e23(不正-> 0x7e71)、seq 974785773、ack 2601927550、win 28960、オプション[mss 1460、sackOK、TS val 41772506 ecr 7124517、nop 、wscale 7]、長さ0 08:25:18.394003 IP(tos 0x0、ttl 128、id 60033、オフセット0、フラグ[なし]、プロトコルTCP(6)、長さ40) 10.0.2.2.50580> web.server.80:フラグ[R]、cksum 0x566a(正解)、seq 2601927550、win 8192、長さ0
これで明らかに、パケットがWebサーバーに送信される前に、ローカルサーバーのIPアドレスと一致するようにソースIPを更新する必要があります。@xinが示唆しているように、NATはローカルサーバーで設定する必要があります。
注#4:
ウェブサーバーに接続しようとすると、ルール9のpktsカウントが1増加することがわかります(以下を参照)。
[user @ local〜] $ sudo iptables -nvL --line-numbers .......... チェーンフォワード(ポリシーACCEPT 0パケット、0バイト) num pktsバイトターゲットプロトオプトインソースソース宛先 1 0 0すべて受け入れ-* * 0.0.0.0/0 0.0.0.0/0 ctstate関連、確立済み 2 0 0すべて受け入れ-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すべて-* * 0.0.0.0/0 0.0.0.0/0 5 1 60 FORWARD_IN_ZONESすべて-* * 0.0.0.0/0 0.0.0.0/0 6 1 60 FORWARD_OUT_ZONES_SOURCE all-* * 0.0.0.0/0 0.0.0.0/0 7 1 60 FORWARD_OUT_ZONESすべて-* * 0.0.0.0/0 0.0.0.0/0 8 0 0 DROP all-* * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID 9 1 60 REJECT all-* * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited .......... [user @ local〜] $ sudo iptables -D FORWARD 9
FORWARDチェーンのルール9が削除されると(@xinが示唆するように、上から)、Webサーバーに接続できます。
[user @ local〜] $ sudo iptables -nvL --line-numbers .......... チェーンフォワード(ポリシーACCEPT 1パケット、60バイト) num pktsバイトターゲットプロトオプトインソースソース宛先 1 12 5857すべて受け入れる-* * 0.0.0.0/0 0.0.0.0/0 ctstate関連、確立済み 2 0 0すべて受け入れ-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 all-* * 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 all-* * 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 all-* * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID ..........