iptables -A PREROUTING -i usb0 -t mangle -p tcp --dport 8080 -j MARK --set-mark 1
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
// направляем трафик с отметкой 1 в таблицу myusb0
ip rule add fwmark 1 table myusb0
ip route ls
192.168.0.0/24 dev usb1 proto kernel scope link src 192.168.0.136 metric 1
192.168.3.0/24 dev usb0 proto kernel scope link src 192.168.3.182 metric 1
IP правило ls
0: from all lookup local
32762: from all fwmark 0x1 lookup myusb0
32763: from 192.168.3.0/24 lookup myusb0
32764: from 192.168.0.1/24 lookup myusb1
32766: from all lookup main
32767: from all lookup default
ip route ls таблица myusb0
default via 192.168.3.2 dev usb0
ip route ls таблица myusb1
default via 192.168.0.1 dev usb1
// открываем socks на порту 8080
ssh -f -N -D 0.0.0.0:8080 root@192.168.3.182
// проверяем, работает ли
curl --socks5 192.168.3.182:8080 ip.appspot.com
channel 1: open failed: administratively prohibited: open failed
curl: (7) Failed to receive SOCKS5 connect request ack.
У меня есть два подключения к Интернету от двух разных интернет-провайдеров, и я хотел бы открыть прокси / socks5 на каждом из них. Я подумал, что имеет смысл связать каждый интерфейс с номером порта, чтобы мы могли управлять подключениями.
Я создал две таблицы маршрутизации (myusb0
и myusb1
) для каждого устройства (usb1
и usb0
), затем пометил трафик на основе номера порта (например, на порт 8080
Я отмечаю его 1) и направляю трафик по этой отметке на конкретную таблицу (myusb0
). Затем я попытался открыть socks5 на этом IP и попробовать его локально, но по некоторым причинам это не сработало.
Как только я получу его работать локально, я думаю, что должен открыть носки в обратном порядке, чтобы я мог сделать его доступным для удаленных серверов, которым необходимо его использовать.
Есть идеи, почему он в настоящее время не работает и как мне это исправить? По некоторым причинам я думаю, что соединение socks пытается использовать шлюз по умолчанию из основной таблицы, который не настроен вместо этого, чтобы следовать за портом 8080
отметьте правило и попробуйте таблицу myusb0. Я использую Ubuntu (последняя версия).
Следует отметить, что оба интернет-провайдера предоставляют динамические IP-адреса.
редактировать
Как я и подозревал, похоже, что трафик на порт 8080 не маршрутизируется (не говоря уже о проблеме с носками), но я не знаю, почему
curl portquiz.net:8080
curl: (7) Couldn't connect to server
Собственно, когда вы это делаете:
$ ssh -f -N -D 0.0.0.0:8080 root@192.168.3.182
$ curl --socks5 192.168.3.182:8080 ip.appspot.com
Происходят следующие события:
SSHD не может открыть новое соединение, потому что IP-пакеты, предназначенные для ip.appspot.com:80 генерируются в коробке маршрутизатора, а не маршрутизируются через него. Из-за этого пакеты не получают отметку, ядро пропускает оба myusb0 и myusb1 таблицы и отсутствие соответствующей записи маршрута в основной таблица вызывает сеть недоступна ошибка. Если вы хотите управлять локально сгенерированными пакетами, правая цепочка под калечить стол будет ВЫВОД вместо того ПЕРЕДАЧА.
О проблеме теста порта:
$ curl portquiz.net:8080
curl: (7) Couldn't connect to server
Пожалуйста, проверьте конфигурацию роутера:
В "основной" таблице есть шлюз по умолчанию?
$ ip route show
Включена ли пересылка пакетов?
$ cat /proc/sys/net/ipv4/ip_forward
Пакеты проходят через NAT?
$ iptables -t nat -nvL
# iptables -t nat -A POSTROUTING -o myusb0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o myusb1 -j MASQUERADE