私はほぼ必死です...私は約2日間iptables転送の例を読んでいて、単純なポート転送を行うことができません。異なるネットワーク上に2台のマシンがあります。 server1(ip 195.21.2.41のS1)は私の家にあり、server2(ip 10.234.141.126のs2)はAmazon EC2にあります。
S2に向かうすべてのトラフィックをs1に転送する必要があります。私はこれを試しました:
すべてのルールのフラッシュ、転送するカーネルパラメータのアクティブ化、ポストルーティングおよびプレルーティングルールの追加
iptables -F -t nat
iptables -F
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -d 195.21.2.41 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -d 10.234.141.126 -p tcp --dport 80 -j DNAT --to 195.21.2.41
オプションで私も追加しました:
iptables -A FORWARD -p tcp -i eth0 -d 195.21.2.41 --dport 80 -j ACCEPT
それから私は試しました:
telnet 10.234.141.126 80
しかし、うまくいきませんでした。なぜこれが機能しないのですか?
更新:いくつかのテストを見てみましょう:
[root@ip-10-234-141-216 ~]# telnet 195.21.2.41 80
Trying 195.21.2.41...
Connected to 195.21.2.41.
Escape character is '^]'.
[root@ip-10-234-141-216 ~]# iptables -F -t nat
[root@ip-10-234-141-216 ~]# iptables -F
[root@ip-10-234-141-216 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@ip-10-234-141-216 ~]# /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.234.141.126 --dport 80 -j DNAT --to-destination 195.21.2.41
[root@ip-10-234-141-226 ~]# /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
[root@ip-10-234-141-216 ~]# /sbin/iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
[root@ip-10-234-141-216 ~]#
[root@ip-10-234-141-216 ~]# telnet 10.234.141.126 80
Trying 10.234.141.126...
telnet: connect to address 10.234.141.126: Connection refused
UPDATE 2ルート出力:
[root@ip-10-234-141-216 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.234.141.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 10.234.141.1 0.0.0.0 UG 0 0 0 eth0
すべての着信トラフィックを別のマシンに転送される指定されたポートにリダイレクトする必要があるだけの場合は、iptablesの代わりにrinetdを試してください。これはトラフィックリダイレクトサーバーです。
なぜiptablesを使用しないのですか?
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 3306 -j DNAT --to 192.168.7.101:3306
単発の仕事:
iptables -t nat -A POSTROUTING -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward=1
同じルーターマシンからtelnetを実行するため、機能しません。このルートマシンを次の希望として使用するすべてのマシンから正常に機能するか、これらの機能を実行するだけの場合は、このルールを追加できます。
/sbin/iptables -t nat -A OUTPUT -i eth0 -p tcp -d 10.234.141.126 --dport 80 -j DNAT --to-destination 195.21.2.41
現在、同じ問題が発生しています。私はそれを解決しました
echo 1 >| /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -d 47.168.137.12 --dport 8081 -j DNAT --to 47.168.137.11:8086
iptables -t nat -A POSTROUTING -j MASQUERADE
--to
ではなく--to-destination
を使用していることを除いて、あなたのルールは私にはよく見えます。 iptables
の別のバージョンを使用している可能性がありますが、man 8 iptables
(v.1.4.7)によると、
--to offset
Set the offset from which it starts looking for any matching. If not passed, default is the packet size.
次に、DNATセクションで:
--to-destination [ipaddr][-ipaddr][:port[-port]]
which can specify a single new destination IP address, an inclusive range of IP addresses, and optionally, a port range (which is only
valid if the rule also specifies -p tcp or -p udp). If no port range is specified, then the destination port will never be modified. If
no IP address is specified then only the destination port will be modified.
In Kernels up to 2.6.10 you can add several --to-destination options. For those kernels, if you specify more than one destination
address, either via an address range or multiple --to-destination options, a simple round-robin (one after another in cycle) load balanc-
ing takes place between these addresses. Later Kernels (>= 2.6.11-rc1) don’t have the ability to NAT to multiple ranges anymore.
これは私が試してみるものです:
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.234.141.126 --dport 80 -j DNAT --to-destination 195.21.2.41
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
また、ファイアウォールで接続が妨げられていないことを確認するために、10.234.141.126
から宛先にTelnetで接続してみます。
telnet 195.21.2.41 80