私はOpenBSD FAQの指示に従ってファイアウォールを設定し、ポート転送を行いました。
https://www.openbsd.org/faq/pf/example1.html https://www.openbsd.org/faq/pf/rdr.html
私がポートフォワーディングを試みる理由は、オンラインゲームのためです。例に示すように、ポート転送ルールはすべてのブロックルールの後に配置する必要があります。ただし、この設定ではポート転送は実行されません。転送するポートは常にブロックされており、最後のルールと一致しません。
私のルールは
pass in on egress inet proto udp from any to any port 3074:3079 rdr-to $gamepc
ところで、ゲームを開始するたびにポート3075で接続がブロックされ、ゲーム内の私のNATが厳しいと思います。
私は何を逃したことがありませんか?
編集:追加情報
現在作成されているすべてのルールのブロックに応じて、block drop in log on $pubif
次のルールがあります。
pass out on { $l1 $l2 $l3 $l4 $l5 } inet keep state
各ポート $l1 ~ $l5 に対して、次の規則を繰り返します。
pass out on $pubif inet from $l1:network to any nat-to ($pubif)
それから
# Gaming Port Forward Begins Here
pass in on egress inet proto udp from any to any port 3074:3079 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 3478 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 4379:4380 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 27000:27031 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 27036 rdr-to $gamepc
pass in on egress inet proto tcp from any to any port 3074 rdr-to $gamepc
pass in on egress inet proto tcp from any to any port 27014:27050 rdr-to $gamepc
答え1
pf
優先順位の問題がある可能性があるため、残りの規則を見ないと話すのは難しいです。
in
ルールはインターフェイスの受信パケットにのみ適用されますegress
。pass out
パケットをリダイレクトするルールがありますか?時には単純な包括的なpass out quick
ルールを使用すると作業が簡単になり、インターネットまたはLANからの着信トラフィックのルールを追加するだけです。これは通常、単純なルーター/ファイアウォールで十分です。
log
パケットがブロックされていることを確認するblock
ために使用できるディレクティブをルールに追加することも役立ちます。tcpdump -ei pflog0
同様にlog
、ルールディレクティブはpass
デバッグおよび/または監視にも役立ちます。
修正する(OPが追加情報を提供した後):
あなたのルールセットが正しいようです。ゲームはUDPを介してのみ接続されますか(またはUDPを介した接続をテストしますか)。pass
TCP/3075 ルールがありません。tcpdump
ingpflog0
または内部インタフェースは手がかりを提供しますか?
アップデート2(この回答にコメントした後)
pass
着信トラフィックのルールもあることを確認してください。$gamepc
簡単に言うと:
# Some macros to improve readibility
gamer_udp = "{ 3074:3079, 3478, 4379:4380, 27000:27031, 27036 }"
gamer_tcp = "{ 3074, 27014:27050 }"
# Block (and log) by default
block log
# Generic outgoing traffic (NAT)
pass out on $pubif inet from $l1:network nat-to ($pubif)
# Incoming traffic (redirection)
pass in on egress inet proto udp to port $gamer_udp rdr-to $gamepc
pass in on egress inet proto tcp to port $gamer_tcp rdr-to $gamepc
# Incoming (redirected) traffic must be allowed to pass out to the LAN
pass out on $l1 inet proto udp to $gamepc port $gamer_udp
pass out on $l1 inet proto tcp to $gamepc port $gamer_tcp
# LAN must be allowed to reach the internet (and me)
pass in on $l1 from $l1:network
警告:これは明らかにテストされていませんが、ほとんど正しいと思います。盲目的にコピーして貼り付けるのではなく、ニーズに合わせて調整してルールセットに統合します。そこに別のルールを挿入することもできます。log
デバッグ目的でディレクティブを追加することもできます(私は常にblock
ルールを文書化します)。pass out
このルールblock
の後に単純なルールを追加し、両方のルールをpass out
削除してこの例をさらに簡素化することもできます$l1
(ルールを維持する必要があります)。nat-to
さらにpf
、SSHを介してルールを変更することは、コンピュータ上で自分自身をロックしようと試みられ、テストされた方法であるため、コンソールアクセスが優先されます。
頑張ってください!