Я недавно получил и настроил небольшой маршрутизатор Linux (Debian). Я добавляю его в существующую сеть, чтобы создать небольшую подсеть с определенными свойствами, а именно фильтрацией интернет-контента. Я перехватываю трафик http/https (80/443) и проталкиваю его через службы фильтрации, работающие на коробке с:
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8080
Хотя это работает правильно (когда клиентские машины знают о https-прокси), я не могу заставить работать не браузерные приложения, а именно клиент Steam. Предполагается использовать диапазон портов TCP и UDP. Я попытался создать правила ACCEPT для этих диапазонов как для TCP, так и для UDP, а также для соединений dport и sport, но безуспешно.
Я что-то неправильно понимаю в маршрутизации? Я предполагаю, что мне не нужно ничего переносить вперед, потому что я клиент, использующий их порты. Я подумал, что мне просто нужно разрешить трафик через порты, и что он будет затем перенаправляться на конечную точку сервера и возвращаться. Кто-нибудь знает, как разрешить клиент Steam (или весь трафик на всех портах) в iptables?
ВТОРОЕ РЕДАКТИРОВАНИЕ (другой код):
Основываясь на комментариях, я решил попробовать обновить мой сценарий, вычеркнув разные строки, которые я пробовал, и просто заставив его принять все. Тем не менее, это все еще не работает, по крайней мере, для Steam. Это мой необработанный код, и я не пытаюсь очистить его для этого сайта, возможно, я что-то упустил, когда сделал это.
#!/bin/sh
IPT=/sbin/iptables
# Flush all chains, to start with a clean slate.
$IPT -F
$IPT -t nat -F
# Set filter Policies. By default, ACCEPT everything.
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
# Set server INPUT rules.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth1 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
# Attempt to blanket statement accept everything (all ports, essentially)
$IPT -A INPUT -p tcp -m tcp --dport 0:65000 -j ACCEPT
$IPT -A INPUT -p udp -m udp --dport 0:65000 -j ACCEPT
$IPT -A FORWARD -p tcp -m tcp --dport 0:65000 -j ACCEPT
$IPT -A FORWARD -p udp -m udp --dport 0:65000 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 0:65000 -j ACCEPT
$IPT -A OUTPUT -p udp -m udp --dport 0:65000 -j ACCEPT
# Accept minecraft, this is working
$IPT -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 25565 -j ACCEPT
$IPT -A FORWARD -p tcp -m tcp --dport 25565 -j ACCEPT
# Set router FORWARD rules.
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth1 -o eth0 -j ACCEPT
# Masquerade outgoing LAN traffic.
$IPT -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8080
# Port forward minecraft, simple enough
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 172.16.1.100