Pregunta Respondiendo en la misma interfaz de donde vino la solicitud


En primer lugar, sé que no es así como se pretende IP. Pero como es habitual, así es como necesito que funcione.

Trabajo para una empresa de seguridad. Hay al menos 2 interfaces de red. Ambas interfaces deben tener una puerta de enlace predeterminada. Una interfaz es una interfaz Ethernet predeterminada, la segunda es una interfaz 3g. Ambos se conectan a internet. Diferentes configuraciones son posibles ya que en una interfaz es la principal y la otra es la copia de seguridad. O la interfaz Ethernet es LAN local (con diferentes subredes, puerta de enlace) y el módem 3G es la conexión a Internet.

Mi pregunta principal es, ¿cómo puedo hacer que la pila TCP / IP de Linux responda en la misma interfaz de la que proviene la solicitud?

La segunda pregunta es cómo puedo iniciar una conexión a través de la interfaz de mi elección, sin jugar con diferentes subredes en diferentes interfaces.


6
2018-01-28 16:06


origen




Respuestas:


Puede establecer rutas en Linux según la dirección IP de origen. Si bien en Linux es posible enlazar a una interfaz específica, es muy poco frecuente. El enrutamiento basado en la IP de origen le permitirá crear una puerta de enlace predeterminada por interfaz saliente. Dado que el socket para el servidor que envía las solicitudes puede vincularse a una IP, esto asegurará que las respuestas se envíen desde la misma interfaz en la que entraron. (Si el servidor está escuchando en la dirección de comodín (0.0.0.0), y no está vinculado a una interfaz específica, no podrá utilizar este método. Todavía debería ser posible usar el módulo conntrack y las marcas de iptables, pero no voy a entrar en eso aquí.

Puedes lograr esto creando otro tabla de ruteo utilizando la ip mando. El '10' aquí es arbitrario.

# 10.0.0.1 = gateway for the secondary interface
# 10.0.0.10 = ip address for the secondary interface eth1

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.10 table 10

Si está enlazando a varias direcciones, o tiene dhcp, puede crear una base de reglas en la subred

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.0/8 table 10

Si está seguro de que el servidor está enlazando a un dispositivo, será suficiente otra puerta de enlace predeterminada con una métrica más alta.

ip route add default via 10.0.0.1 dev eth1 metric 2

8
2018-01-28 18:28



En este dispositivo es posible que ambos tengan una dirección IP dinámica. Entonces, si lo entiendo bien, podría hacer que funcione con lo siguiente: ip route add default via iif eth0 table 10 ip rule add oif eth0 table 10 ip route add default via iif ppp0 table 20 ip rule add oif ppp0 table 20 - Malic
¡Funciona! Pero con la dirección ip no con el nombre de la interfaz - Malic
@Malic: sí, la puerta de enlace (predeterminada a través de ...) debe ser una dirección IP. - JimB
Todo funciona con su primera parte del ejemplo (especifique la dirección IP de origen). Dado que la dirección IP se obtiene a través de dhcp, estoy probando tu segunda parte del ejemplo, usando la interfaz. msgstr "regla ip agregar oif eth1 tabla 10". oif no es aceptado, usando iif es bien aceptado. Pero la funcionalidad se rompe, los paquetes no se envían a través de la interfaz "eth1". ¿Tienes una idea? Para mi parece que todo es correcto. (ip regla add iif eth1 tabla 10) - Malic
@Malic - oif y iif (salientes y entrantes) no son lo mismo, así que no entiendo por qué crees que funcionaría. ¿Qué quieres decir con que "oif no es aceptado"? Por favor, checa el ip Página de manual para una referencia completa. - JimB


No estoy seguro de si esto es posible en el sentido general que deseas. Ciertamente, puede controlar qué interfaz de red utiliza un programa que se ejecuta en su máquina enlazándola a una dirección particular.

Sin embargo, en general, no creo que haya una manera de conectar los paquetes de red entrantes a los paquetes salientes. Lo mejor que puede hacer es proporcionar instrucciones al sistema siguiendo las líneas de 'si está intentando conectarse a esta red, use siempre esta interfaz'. Esto se puede hacer de varias maneras a través de la tabla de enrutamiento del sistema (iproute) o con iptables reglas de firewall.

Si esto es por motivos de seguridad, ¿ha pensado en usar máquinas virtuales que se ejecutan en su servidor físico? Puede configurar una máquina virtual para que solo tenga acceso a una interfaz, y otra máquina virtual para tener acceso solo a la otra. Como la VM no puede ver la otra interfaz, no hay forma de que pueda responder a los paquetes de la red incorrecta.

Probablemente debería también mirar esta pregunta de serverfault que cubre cómo controlar qué interfaz arp peticiones salen. También debe mirar el sysctl rp_filter, que se puede configurar para ignorar los paquetes que aparecen en la interfaz incorrecta.


1
2018-01-28 16:40