>У меня FreeBSD и GRE туннель к спутниковому провайдеру. Как мне настроить
>чтобы веб-трафик ходил по спутнику, а остальное шло по наземному каналу?
>
>
>спасибо
У меня сделано следующим образом. Поднят gre, но default route указывает на наземный канал. A в ipfw добавлено правило:
forward 192.168.253.253 ip from 192.168.203.54 to any xmit ng0 out,
где 192.168.253.253 - удаленный адрес на gre,
192.168.203.54 - локальный адрес на gre,
ng0 - внешний интерфейс, через который прописан default route.
То есть все ходит через землю, но если у ip-пакета source-ip 192.168.203.54 - то заворачивается в туннель и возвращается через спутник.
Теперь делаем аксесс-лист в squid.conf, например, такой:
tcp_outgoing_address 192.168.203.54 !mynet clients
где mynet - acl, описывающий мою сеть (чтобы ходило напрямую),
clients - клиенты, кого нужно завернуть на спутник.
P.S. в FreeBSD 5.3 есть проблема с правилом fwd ipfw. Трафик не заворачивается, если источник пакета - сама система. Следующий патч исправляет проблему:
Index: ip_output.c
===================================================================
RCS file: /FreeBSD-CVS/src/sys/netinet/ip_output.c,v
retrieving revision 1.225.2.3
diff -u -b -r1.225.2.3 ip_output.c
--- ip_output.c 15 Sep 2004 15:07:09 -0000 1.225.2.3
+++ ip_output.c 19 Sep 2004 15:51:42 -0000
@@ -713,7 +713,7 @@
/* Or forward to some other address? */
fwd_tag = m_tag_find(m, PACKET_TAG_IPFORWARD, NULL);
if (fwd_tag) {
- if (!in_localip(ip->ip_src) && !in_localaddr(ip->ip_dst)) {
+ if (!in_localaddr(ip->ip_dst)) {
dst = (struct sockaddr_in *)&ro->ro_dst;
bcopy((fwd_tag+1), dst, sizeof(struct sockaddr_in));
m->m_flags |= M_SKIP_FIREWALL;