Я надеюсь, что кто-то сможет следить за этим, и я объясню, как могу.
Я пытаюсь перенаправить весь трафик с порта 6999 на x.x.x.224 через туннель ssh и на порт 7000 на x.x.x.218.
Вот немного искусства ASCII:
|browser|-----|Squid on x.x.x.224|------|ssh tunnel|------<satellite link>-----|Squid on x.x.x.218|-----|www|
3128 6999 7000 80
Когда я удаляю туннель ssh, все работает нормально.
Идея состоит в том, чтобы отключить шифрование в туннеле ssh (для экономии полосы пропускания) и включить максимальное сжатие (для экономии большей пропускной способности). Это потому, что это спутниковая связь.
Вот туннель ssh, который я использовал:
ssh -C -f -C -o CompressionLevel=9 -o Cipher=none eamorr@172.16.1.224 -L 7000:172.16.1.224:6999 -N
Проблема в том, что я не знаю, как получить данные из Squid на x.x.x.224 в туннель ssh? Я ошибаюсь? Должен ли я создать туннель ssh на x.x.x.218? Я использую iptables, чтобы остановить squid на x.x.x.224 от чтения порта 80, но вместо этого для подачи с порта 6999 (т.е. через туннель ssh). Мне нужно еще одно правило iptables?
Любые комментарии приветствуются.
Спасибо заранее,
Что касается вопроса Эдуардо Иванека, вот netstat -i any port 7000 -nn
дамп из x.x.x.218:
14:42:15.386462 IP 172.16.1.224.40006 > 172.16.1.218.7000: Flags [S], seq 2804513708, win 14600, options [mss 1460,sackOK,TS val 86702647 ecr 0,nop,wscale 4], length 0
14:42:15.386690 IP 172.16.1.218.7000 > 172.16.1.224.40006: Flags [R.], seq 0, ack 2804513709, win 0, length 0
Обновление 2:
Когда я запускаю вторую команду, в моем браузере появляется следующая ошибка:
ERROR
The requested URL could not be retrieved
The following error was encountered while trying to retrieve the URL: http://109.123.109.205/index.php
Zero Sized Reply
Squid did not receive any data for this request.
Your cache administrator is webmaster.
Generated Fri, 01 Jul 2011 16:06:06 GMT by remote-site (squid/2.7.STABLE9)
удаленный сайт - 172.16.1.224
Когда я делаю tcpdump -i any port 7000 -nn
Получаю следующее:
root@remote-site:~# tcpdump -i any port 7000 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
Если я правильно вас понял, то с вашим определением туннеля что-то не так. То, что вы, кажется, делаете с вашей текущей командной строкой, - это переадресация трафика с порта 7000 на текущем хосте (я предполагаю, что это .224) на порт 6999 на самом .224.
Попробуйте вместо этого:
ssh -N -g -f -C -o CompressionLevel=9 -o Cipher=none eamorr@172.16.1.224 -L 6999:172.16.1.218:7000
Или, если 172.16.1.218:7000 недоступен напрямую (я предполагаю, что это не так, поскольку в противном случае вы, вероятно, подключились бы к нему напрямую), вы, вероятно, вместо этого хотите подключиться к 172.16.1.218:
ssh -N -g -f -C -o CompressionLevel=9 -o Cipher=none eamorr@172.16.1.218 -L 6999:localhost:7000
Формат для -L
является <localport>:<remotehost>:<remoteport>
. <remotehost>
относительно хоста назначения, поэтому в этом случае localhost
должно сработать.
Примечание я добавил -g
в случае, если вы хотите использовать туннель с машины, отличной от .224 (я предполагаю, что вы используете ssh на .224).