このアイデアをグラフィカルに表現すると、次のようになります。

このアイデアをグラフィカルに表現すると、次のようになります。

つまり、
eth0(LAN)、eth1(ADSL)、eth2(4G)の 3 つのインタフェースです。 eth0
- > eth1:動作中
(ポート80、443、4070)eth0 - > eth2:発生しない


このアイデアをグラフィカルに表現すると、次のようになります。

ポート80と443はeth2を通過し
、残りはeth1を通過します。
ここに画像の説明を入力してください。

ネットワーク計画:

eth0: -ip 10.0.0.1 -net 10.0.0.0/8 -gw 10.0.0.1 (the servers own intf) 
eth1: -ip 192.168.1.74 -net 192.168.1.0/24 -gw 192.168.1.254 
eth2: -ip 192.168.1.91 -net 192.168.0.0/24 -gw 192.168.0.1 






この新しいスクリプトは、22と4070を正しいテーブルに再ルーティングするようです。
ただし、テーブルに到達すると、eth2に再ルーティングされません。




22と4070を除いて、スクリプトは動作します!

(ポート80はコメントアウトされておらず、動作しますが、eth1を通過するのは間違っています。)

modprobe iptable_nat
modprobe ip_conntrack

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -F PREROUTING
iptables -t nat -F
iptables -t mangle -F
iptables -F
# This next line restores any issues trying to connect to something
# if you get weird ACK packets when trying to connect (at least i did)!
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
ip route flush table main

iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 22 -j MARK --set-mark 1
###  iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 4070 -j MARK --set-mark 1

## Setup routes
# LAN
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0
# ADSL
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
# 4G (Only accessible if marking packages with \x01
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth2
# Default via ADSL
## -- Does the same as ip route below? route add default gw 192.168.1.254


echo "201 eth2.out" >> /etc/iproute2/rt_tables

ip rule add fwmark 1 table eth2.out
ip route add default via 192.168.0.1 dev eth2 table eth2.out
ip route add default via 192.168.1.254 dev eth1



## Setup forwards
# From 4G to LAN
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From ADSL to LAN
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From LAN to ADSL (Default route out)
# - Note: If marked packages is sent to ADSL they will be mangled and rerouted to 4G
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE









前のスクリプト:


  Ignore everything below unless you're interested in retracing my steps!!




何かが間違っている場合に備えて、環境を設定するためにrouter.shスクリプトを作成しました。 3つのポートがあり、それを4G接続に送信し、残りは有線ADSL接続に送信したいと思います。このために--dport == 443 |条件が満たされたら、デフォルトルートからパケットを破棄し、4Gインターフェイスを介して送信するようにiptablesに指示します。 80 | 4070

しかし、これはうまくいきません。とにかく、まだ有線電話でルーティングされています。

私のスクリプトは次のとおりです。

#!/bin/bash

## routing tables
# wireless = 4G via eth2
# adsl = adsl via eth1

modprobe iptable_nat
modprobe ip_conntrack

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
ip route flush table main
ip route flush table wireless
ip route flush table adsl

## Setup routing tables
# ADSL
ip route add table adsl to 192.168.1.0/24 dev eth1
# 4G
ip route add table wireless to 192.168.0.0 dev eth2
ip rule add fwmark 0x1 table wireless

## Setup routes
# LAN
route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0
# ADSL
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
# 4G (Only accessible if marking packages with \x01
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth2
# Default via ADSL
route add default gw 192.168.1.254


## Forward ports into the LAN
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 10.0.0.3:80


## Lets mark all packets we want for 4G forward
# HTTPS
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# HTTP
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 80 -j MARK --set-mark 1
# Spotify
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 4070 -j MARK --set-mark 1

## Setup forwards
# From 4G to LAN
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# From ADSL to LAN
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# From LAN to ADSL (Default route out)
# - Note: If marked packages is sent to ADSL they will be mangled and rerouted to 4G
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -j LOG
#iptables --table nat --append POSTROUTING --out-interface eth2 --jump SNAT --to-source "192.168.1.74"
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

また、スクリプトの下部に次の3つを追加してみました。

iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 80 -j SNAT --to "192.168.0.91"
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 443 -j SNAT --to "192.168.0.91"
iptables -t nat -A POSTROUTING -o eth2 -p tcp --dport 4070 -j SNAT --to "192.168.0.91"

また、成功せずに試しました。

iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1

最後に試したことは次のとおりです。

## Lets mark all packets we want for 4G forward
# HTTPS
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# HTTP
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 80 -j MARK --set-mark 1
# Spotify
iptables -A POSTROUTING -t mangle -o eth1 -p tcp --dport 4070 -j MARK --set-mark 1

ルーティングは正常に機能し、Web検索、音楽のリスニングなどを行うことができますが、間違ったインターフェイスを介して行っています。私は長い間インターネット検索をして、私がやっていることとその理由を理解するためのいくつかの情報を見つけました。 tcを介してトラフィックを調整することはできますが、iptablesでパケットを表示して行うことができれば、多くの役に立ちます。

私の考えでは、主に間違った順序で別の規則を適用しているようです。仮面舞踏会部分?それとも存在すべきですか?

誰かがどのように説明できますか?DNAT外部インターフェイス(1つまたは2つのプロトコル)から内部10.0.0.0アドレス空間までtcp:80と呼ばれますか?



出力:

root@Netbridge:~# route -n Kernel IP routing table Destination    

Gateway         Genmask         Flags Metric Ref    Use Iface<br>
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth1<br>
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0<br>
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2<br>
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1


root@Netbridge:~# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0c:29:7e:9e:4e  
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0

eth1      Link encap:Ethernet  HWaddr 00:0c:29:7e:9e:58  
          inet addr:192.168.1.74  Bcast:192.168.1.255  Mask:255.255.255.0

eth2      Link encap:Ethernet  HWaddr 00:0c:29:7e:9e:62  
          inet addr:192.168.0.91  Bcast:192.168.0.255  Mask:255.255.255.0

次のガイドラインに従ってください。
宛先ポートに応じてさまざまなインターフェイスにトラフィックを出力
iptables は特定のポートを特定のネットワークカードに転送します。
他の関連スレッドから。

ベストアンサー1

BatchyXはすでにiptablesとルーティングについて本当に良い説明を提供しているので、怠惰にしてスクリプトに進みます。

192.168.0.91 NATを介してすべてのトラフィックをポート80,443,22,4070に転送する必要があります。残りは192.168.1.254を介してNATされます。

私は再びテストし、最終的にこれに従った。ガイド。このガイドで欠けている部分は私のスクリプトの最後の3行です。別のポートでこれを見つけましたが、リンクを失いました。

これはテスト済みのジョブスクリプトです。

デフォルトパスが必要です

私がスクリプトに入れなかったことの1つは、デフォルトのパスを設定することでした。しなければならない

route add default gw 192.168.1.254

これを行うには、このパスがroute -n唯一のデフォルトパス(Dest:0.0.0.0)である必要があります。

0.0.0.0    192.168.1.254    0.0.0.0    UG    0    0    0    eth1

fw-router.sh

# iptables リセット/リフレッシュ
iptables -F
iptables-X
iptables -t nat -F
iptables -t nat -X
iptables -t マングル -F
iptables -t マングル -X
iptables -P 入力を許可
iptables -P 今後受け入れる
iptables -P 出力を許可

#リセット/フラッシュ/設定IPルーティング(表4)
IP ルート更新テーブル 4
IPルーティング表示テーブルmain | grep -Ev ^default | ROUTEを読み取ると表4が追加されました。
IP ルーティングは表 4 に追加され、デフォルトで 192.168.0.1 を転送します。

#D.Portと一致するパケットを表示します。
iptables -t mangle -A PREROUTING -p tcp --dport 22 -s 10.0.0.0/24 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 80 -s 10.0.0.0/24 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 443 -s 10.0.0.0/24 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 4070 -s 10.0.0.0/24 -j MARK --set-mark 4

#SNATルール
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.74
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.0.91

#IPルーティング
IP ルール 表 4 に fwmark 4 を追加
IP ルート更新キャッシュ

#IPスタック
#ガイドに欠けている部分
エコ1> /proc/sys/net/ipv4/ip_forward
/proc/sys/net/ipv4/conf/*/rp_filter の f に対して echo 0 > $f を実行します。
エコ0> /proc/sys/net/ipv4/route/flush

PS1:つまり、MASQUERADENATは、一種のロードバランシングが必要な場合や、着信トラフィックを処理するためにDNATを必要とする複数の外部IPに対しては機能しません(ほとんどの場合、確かにあなたの場合)。方向制御が必要ですSNAT

PS2:純粋なiptablesでは十分ではありません。

おすすめ記事