
現在、ポート80で実行されているNASボックスがあります。外部からNASに接続するために、次のようにポート8080をNASのポート80にマップしました。
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80
これは魅力のように動作します。ただし、これはネットワーク外(職場、他の家など)からサイトにアクセスする場合にのみ機能します。したがって、と入力するとmywebsite.com:8080
IPTablesが正しく機能し、すべてがうまく機能します。
これで問題は、ネットワーク内でこのポートをどのようにリダイレクトできるかということです。私のドメイン名はmywebsite.com
内部(10.32.25.1)から私のルーター(Linuxサーバー)を指していますが、ポート8080を内部から10.32.25.2のポート80にリダイレクトしたいと思います。
どんな手がかりがありますか?
編集#1
これを助けるためにこの図を設定しました。あなたが探しているものが間違っているか間違っている場合は、いつでも更新してください。
iptables
| .---------------.
.-,( ),-. v port 80 |
.-( )-. port 8080________ | |
( internet )------------>[_...__...°]------------->| NAS |
'-( ).-' 10.32.25.2 ^ 10.32.25.1 | |
'-.( ).-' | | |
| '---------------'
|
|
__ _
[__]|=|
/::/|_|
答え1
ついに方法が見つかりました。まず、「外部」ルールを追加する必要があります-i eth1
(eth1はWAN接続です)。 2つのルールを追加する必要があります。結局私が得たもの:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE
答え2
また、宛先NATを実行するにはパケット転送を有効にする必要があることに言及することを忘れました。デフォルトでは通常はオフになっているため、iptablesルールは適用されません。次のコマンドを実行してアクティブにできます。
echo 1 > /proc/sys/net/ipv4/ip_forward
答え3
まず転送を許可
echo 1 > /proc/sys/net/ipv4/ip_forward
次に、iptableルールを設定します。
IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE
たとえば、次の行を配置できます/etc/rc.local
。注:Debian jessieがこれを実行可能にし、次の方法でrc.localサービスを有効にしたため
systemctl enable rc-local.service
答え4
まず、転送が有効になっていることを確認する必要があります。
cat /proc/sys/net/ipv4/ip_forward
そうでない場合は1
実行してくださいecho 1 > /proc/sys/net/ipv4/ip_forward
。
10.32.25.1のポート80および443に到着するトラフィックを10.32.25.2のポート80に転送するには、次の規則を使用する必要があります。
iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80