
Linuxベースのルータがあり、iptablesコマンドに基づいてVPNとispを介してトラフィックをルーティングするようにVPNクライアントを設定しました。 VPNを介して特定のtcpとすべてのudpポートのみをルーティングしようとし、tcpdumpを使用して確認しましたが取得できないようです。ここで動作するのは私が使ったコードです
iptables -t mangle -A PREROUTING -i br0 -p tcp -m multiport --dport ! 20,21,22,80,81,443,8080 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i br0 -p udp -j MARK --set-mark 2
ここで、「2」はVPNテーブル(私の場合はテーブル10)、「1」はISPテーブル(テーブル100)です。
スクリプトには他のルーティング関連機能があり、特定のIPをVPNとKillスイッチに移動するのにうまく機能します。
概念は、ルータ自体(内部 "lan" 192.168.1.1)で急流クライアントを実行しようとしており、上記にリストされていないすべてのudpとすべてのtcpポートがVPNを使用し、残りの部分がVPNを使用したいということです。 isp
「入力出力」と「転送」オプションも使用する必要があるかもしれません。ただし、読み取った内容にもかかわらずポートを正しくルーティングできないようで、スクリプトが中断され終了します。ルータがクラッシュしたりインターネットに接続したりするために、VPNまたはISPを通過するトラフィックはまったく発生しません。
欲求不満のためにポート部分を削除したため、ポート部分のないスクリプトは次のとおりです。
#!/bin/sh
main() {
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
echo 0 > $i
done
ip route flush table 100
ip rule del fwmark 1 table 100
ip route del default table 100
ip rule del fwmark 2 table 10
ip route flush cache
iptables -t mangle -F INPUT
iptables -t mangle -F OUTPUT
iptables -t mangle -F FORWARD
iptables -t mangle -F PREROUTING
iptables -t mangle -F POSTROUTING
iptables -t mangle -F
ip route show table main | grep ^default | grep -Ev tun1 \
| while read ROUTE ; do
ip route add table 100 $ROUTE
done
ip route add default table 100 via
$(nvram get wan_gateway)
ip rule add fwmark 1 table 100
ip rule add fwmark 2 table 10
ip route flush cache
}
int() {
iptables -t mangle -A PREROUTING -i "$1" -j MARK --set-mark 1
}
adr() {
iptables -t mangle -A PREROUTING -i br0 -s "$1" -j MARK --set-mark 2
}
kills() {
iptables -I FORWARD -s "$1" -o eth0 -j DROP
}
main
int br0
adr 192.168.1.115/32
adr 192.168.1.119/32
adr 192.168.1.147/32
kills 192.168.1.115/32
kills 192.168.1.119/32
kills 192.168.1.147/32
exit 0
私のルータはデフォルトでVPNの代わりにISPを介してトラフィックをルーティングするように設定されています。
答え1
これを理解する1つの鍵は、ルータホストに入って来るパケットがiptables
ルータを通過するパケットとは異なるパスをとることです。たとえば、Googleiptables-chains.png
でいくつかの画像を検索してフォローアップを行うことができます。http://jensd.be/wp-content/uploads/iptables_chains.png。
概要画像の位置:http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1002061/10822f1.pngルールを設定するのにも役立ちますiptables
。
特に、PREROUTING
このテーブルの接続リストmangle
は次の場合にのみ適用されます。着信パケットを転送する場合(リモートからリモートへ)、パケットが転送されるローカルからリモートへのトラフィックに適しており、発信パケットをルーターに送信したい場合に適しています。したがって、上記の初期ルール設定は、ローカルトラフィックをリモートトラフィックに転送するためにOUTPUT
テーブルチェーンをターゲットにする必要があります。mangle